python - 求和函数在python中的使用

标签 python pandas numpy

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 个元素统计有多少 xi 值满足绝对值条件x_d。输出数组的第 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])

关于python - 求和函数在python中的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47554592/

相关文章:

Python 3.6 安装 statsmodels 失败,退出状态为 127

python - Turbo 排序 - 超出时间限制

python - 在 Pandas 的查询中使用动态列表

python - 从列表列表中删除列表 Python

python - 使用networkx从矩阵到图(有向和无向)

python - 如何在 Python 中修改绘图的值

python - Django 用户 julienb 没有要填充的配置文件

python Pandas : Denormalize data from one data frame into another

python - 多索引索引中的行为不一致

python - 如何使用python将数组中的值替换为字符串