python求和函数sum_python中sum函数的用法

这篇博客解释了Python中NumPy广播的概念,以及如何利用它来计算密度。在给定的例子中,`x_d`是一个长度为30的一维数组,而`x`是一个长度为20的数组。通过将`x`的每个值与`x_d`进行逐元素比较,可以得到一个长度为30的布尔数组,表示每个`x_d`值与`x`的对应元素之间的距离是否小于0.5。最后,`sum()`函数用于计算满足条件的`x`值的数量,生成一个反映每个`x_d`值满足条件的`x`值数量的数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

x_d = np.linspace(-4, 8, 30)

print('x_d shape: ',x_d.shape)

print('x shape: ',x.shape)

density = sum((abs(xi - x_d) < 0.5) for xi in x)---------> difficulty in understanding statement

output:

x_d shape: (30,)

x shape: (20,)

我很难理解上述说法

对于x的每个值,我们从中减去x_d,我们将获得单个值.但是我们的密度为(30,)

我们如何获得密度尺寸为(30,)

解决方法:

表达方式

xi - x_d

将使用NumPy broadcasting使两个对象的形状一致.在这种情况下,这意味着将标量值xi视为与x_d具有相同值和相同尺寸的数组.

Abs函数和小于比较将对NumPy数组逐元素地起作用,因此表达式

(abs(xi - x_d) < 0.5)

应该会导致一个长度为30的数组(大小与x_d相同),其中该数组的每个条目都是true或False,这取决于应用于x_d每个元素的条件.

对于xi的多个值重复此操作,从而导致多个不同的length-30数组.

在这些数组上调用sum的结果是将它们逐个元素地相加(并且由于广播的缘故,由于sum函数的默认初始值为0,因此第一个数组按元素逐个相加0,保持不变).

因此,在最终结果中,它将是一个长度为30的数组,其中数组的项0计算基于x_d的第0个元素满足绝对值条件的xi个值.输出数组的项目1将计算x_d的第一个元素上满足绝对值条件的xi值的数量,依此类推.

这是一些测试数据的示例:

In [31]: x_d = np.linspace(-4, 8, 30)

In [32]: x = np.arange(20)

In [33]: x

Out[33]:

array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,

17, 18, 19])

In [34]: density = sum((abs(xi - x_d) < 0.5) for xi in x)

In [35]: density

Out[35]:

array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

1, 1, 1, 1, 1, 1, 1])

标签:pandas,python,numpy

来源: https://codeday.me/bug/20191110/2014630.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值