如何在 numpy 矩阵运算中利用并行性

how to exploit parallelism in a numpy matrix operation

以下代码生成一种 'skyline' 配置文件,其中初始值为 0,配置文件由 1 组成。我使用 for 循环实现,我想知道是否有更有效的方法来获得相同的结果。

#https://app.codility.com/programmers/task/max_square_on_matrix/
import numpy as np
np.random.seed(2)
A = np.zeros((5,5), dtype=int)
X = np.random.randint(low=1, high=5, size = 5)

print('A ')
print(A)
print('----------------------')
print('X ')
print(X)
#
for j in range(len(A)):
        A[5-X[j]:5,j] = 1
print('----------------------')
print('A modified ')
print(A)

除非您想使用矩阵 A 进行一些计算,结果不是 1 或 0,您可以简单地将 1 和 0 视为 True 和 False:

N = 5
X = np.random.randint(low=1, high=N, size = (N,1) )
A = (X >= range(N,0,-1)).T

编辑:

糟糕,我反应太快了。事实证明,我的方法并不比 N=5 的 for 循环“更有效”。

另外,下面的答案比我原来的答案稍微好一点,特别是对于大 N:

a = np.array(range(N,0,-1),ndmin=2).T
X = np.random.randint(low=1, high=N, size=N)
A = X>=a

在我的电脑上,这比 N=5 时的 for 循环慢一点。但是,当N=100时,比for循环快2倍。