向每一行添加行相关值

Adding a row-dependent value to each row

我有一个包含以下数字的二维数组:

A = [[1, 5, 9, 42],
     [20, 2, 71, 0],
     [2, 44, 4, 9]]

我想在不使用循环的情况下向每一行添加不同的常量值。此值为 n*c,其中 n 是当前行,c 是常量。例如,c=100 这样:

B = [[1, 5, 9, 42],
     [120, 102, 171, 100],
     [202, 244, 204, 209]]

如有任何帮助,我们将不胜感激

您可以按如下方式进行:

>>> A = [[1, 5, 9, 42],
...      [20, 2, 71, 0],
...      [2, 44, 4, 9]]
...      

>>> a = np.array(A)
>>> c = 100

>>> addto = np.arange(len(a))[:, None] * c

>>> a + addto
array([[  1,   5,   9,  42],
       [120, 102, 171, 100],
       [202, 244, 204, 209]])

np.arange(len(a)) 为您提供索引的一维数组 array([0, 1, 2]),然后您可以将其乘以 c.

问题是您需要通过扩展它的维度来使其符合 NumPy 的 broadcasting rules

>>> np.arange(len(a)).shape
(3,)

>>> np.arange(len(a))[:, None].shape
(3, 1)

你也可以做类似 np.linspace(0, 100*(len(a)-1), num=len(a))[:, None] 的事情,但在这里可能有点矫枉过正。