我希望创建一个基于长度为
这里可以使用简单的双重for循环来完成,但我希望有一种更快捷的解决方案。该矩阵相对较小。
我发现理解速度比双重for循环快。
n + m
的数组元素来构建大小为n by m
矩阵。这里可以使用简单的双重for循环来完成,但我希望有一种更快捷的解决方案。该矩阵相对较小。
n = 4
m = 6
s = n + m
array = np.arange(s) # note: arange is only for example. real array varies.
matrix = np.zeros((n,m))
for i in range(n):
for j in range (m):
matrix[i,j] = array[i+j]
我发现理解速度比双重for循环快。
matrix3 = [[array[i+j] for i in range(m)] for j in range(n)]
有更快的方法吗?
另一个额外的奖励是使用模运算符。我实际上只需要满足 i+j % 2 == 0
的索引。在双重循环中,模运算方法似乎要快一些,但这可能对于通过numpy生成此矩阵来说不方便或不明智。
如果不这样做也可以,因为矩阵乘法将在之后发生,必要的元素无论如何都将被乘以零。我提到模除仅是出于考虑到这可能导致更快的解决方案。
针对这个MWE(最小化工作示例)
for i in range(n):
for j in range (m):
if (i + j) % 2 == 0:
matrix[i,j] = array[i+j]
注意:
我希望使用numpy解决方案,并且认为这将是最快的,但只要比纯Python双重循环更快,任何纯Python(包括numpy/scipy)解决方案都可以接受
动机:
我正在尝试从双重循环中消除所有对数组的依赖项,以便我可以使用广播而不是双重循环。这是剩下的唯一一个数组
arr[:, None]+ arr
- hpaulj