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
的多个值重复进行,导致多个不同的长度为 30 的数组。
在这些数组上调用 sum
的结果是它们按元素相加(并且还由于广播的运气,因为 sum
函数具有默认初始值0,第一个数组按元素添加到 0,保持不变)。
因此在最终结果中,它将是一个长度为 30 的数组,其中数组的第 0 项根据 的第 0 个元素统计有多少
。输出数组的第 1 项将计算 xi
值满足绝对值条件x_dx_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])
关于python - 求和函数在python中的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47554592/