python – 替换索引数组下面的numpy 2D数组元素

我搜索了之前的问题,并没有找到一个非常适合这个问题.

我将A的第j列中的所有单元格的值设置为0,其行的行数小于m [j]:

import numpy as np
n = 8
A = np.ones([n,n])
m = np.array([1,1,1,2,2,2,3,4])
for j in range(n):
    for i in range(m[j]):
        A[i,j] = 0

如何在没有’for’循环的情况下重写该脚本?

最佳答案 你可以使用
broadcasted NumPy comparison

>>> A[np.arange(n)[:, None] < m] = 0
>>> 
array([[0., 0., 0., 0., 0., 0., 0., 0.],
       [1., 1., 1., 0., 0., 0., 0., 0.],
       [1., 1., 1., 1., 1., 1., 0., 0.],
       [1., 1., 1., 1., 1., 1., 1., 0.],
       [1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1.]])

这里,调用[:,None]增加了np.arange(n)的形状,使得比较 Divakar’s solution,这与此非常相似.

点赞