首页 > 解决方案 > 如何将每个 numpy 列中的所有非零元素分配给大小与列数相同的数组中的值?

问题描述

所以这有点拗口。但这是我想要做的:

b = np.array([7,8,2,3])

a = np.array([[1, 1, 0, 1],
              [0, 0, 1, 1],
              [0, 1, 1, 0]])

*** The Magic Happens ***

array([[7, 8, 0, 3],
       [0, 0, 2, 3],
       [0, 8, 2, 0]])

标签: pythonarraysnumpy

解决方案


我几乎不认为有一个更快/更整洁的答案。为其他人写作以发现它有帮助。正如评论中提到的@Mark,您可以通过重复行并按元素相乘来找到非零元素a>0并将其乘以b将广播b到的形状:a

output = (a > 0) * b

另一种方法是:

a[a>0] = np.tile(b,(a.shape[0],1))[a>0]

推荐阅读