微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python中sum函数的用法

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])

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐