向每行添加与行相关的值

时间:2018-07-26 13:52:53

标签: numpy constants add

我有一个包含以下数字的2D数组:

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]]

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

>>> 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]的操作,但这在这里可能是过大了。