python - 使用两个隐式循环迭代数组

标签 python loops numpy indexing

是否可以对具有两个索引的数组进行隐式迭代? 这是我想做的一个非常简单的例子:

import numpy as np

x = np.arange(3)
y = np.zeros(3)

for i in range(3):
    y[i] = np.sum(x - x[i])

有一个隐式循环(求和)和一个显式循环(for i in range(3))...是否有可能有一个完全隐式的版本?

最佳答案

如果可能,您应该始终尝试在计算机科学之前使用数学。您的表达式 y[i] = np.sum(x - x[i]) 可以用一点代数重写为 y[i] = np.sum(x) - x .size * x[i].这非常清楚地表明您可以在没有任何循环的情况下重写代码:

y = np.sum(x) - x.size * x

显而易见,对于大型数组,它的运行速度比@JoshAdel 的解决方案快得多,对于大小为 1000 的输入快 400 倍:

>>> x = np.random.normal(size=(1000,))
>>> np.allclose(np.sum(x - x[:,None], 1), np.sum(x) - x.size * x)
True

%timeit np.sum(x - x[:,None], 1)
100 loops, best of 3: 6.33 ms per loop

%timeit np.sum(x) - x.size * x
100000 loops, best of 3: 16.5 us per loop

关于python - 使用两个隐式循环迭代数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19117277/

相关文章:

c - 意外调用 printf

r - 如何循环遍历 R 中的 CSV 文件文件夹

python - 值错误: could not convert string to float: '���'

python - 删除保持样式的 html(标签)部分 - python

python - 从函数返回 str 和 int

python - 匹配 Python 正则表达式中的\[\]

java - 如何解决这个异常:Exception in thread "main" java. lang.ArrayIndexOutOfBoundsException

python - 根据 Python 数据框中的条件创建包含所有唯一可能组合的列表

python - 为什么Python有不同类型的字节

python - 如何使用适用于 Python 的 AWS SDK 递归列出 AWS S3 存储桶中的文件?