python - 当我们使用列表理解时如何保持原始列表的形状?

标签 python list numpy list-comprehension shapes

我有一个形状如下的零列表:

yp = numpy.zeros(5, 2, 2), dtype = complex)

我使用两个 for 循环对其进行了修改,如下所示:

for a in range(0,5):
    for b in range(0, 2):
        yp[a, b, b] = numpy.sum(F[a, b,:])

如何使用列表理解来做同样的事情? 显然,使用下面的行将改变我原始列表的形状。

yp = [numpy.sum(F[a, b,:]) for a in range(0,5) for b in range(0, 2)]   

最佳答案

您的原始循环无法转换为列表理解,因为它没有分配 numpy 矩阵的所有元素。列表推导式总是生成一个完整的列表(或列表的列表)。

如果您的目标是用零填充未分配的元素,那么相应的列表理解可能如下所示:

[ [ [0,0,numpy.sum(y_network[a, b, :])] for b in range(2)] for a in range(5)]

不同之处在于,每个理解级别都会生成一个列表,该列表本身对其元素使用理解。

请注意,这并不完全相同,因为 numpy.sum(y_network[a, b, :]) 的值始终放置在第三维的最后一个元素中位于索引 b 处。您可以使用更多代码来左右填充零,但这会使其变得复杂且不可读,这几乎会破坏使用列表理解的目的。

您还可以为作业编写一个循环:

for b in range(2): yl[:,b,b] = np.sum(network[:,b,:],1)

关于python - 当我们使用列表理解时如何保持原始列表的形状?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56812405/

相关文章:

python - 当 n 大于列表中元素的数量时,将列表旋转 n 次

Python 比较 2 个列表是否有重复项

python - Numpy:查找包含浮点值的两个文件之间的差异

java - Mac OS 中的 Pip 安装错误(错误 : command '/usr/bin/clang' failed with exit status 1)

python - 遍历列表删除项目,一些项目没有被删除

python - 使用 SQLAlchemy 在 POSTGRES 中计算 DATEDIFF

python - 我的脚本和控制台中使用点积的不同输出

python - 如何获取非整数元素的索引

python - 从 Python 中的回调返回值

python - numpy 排列和位置