我有一个包含以下数字的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]]
任何帮助将不胜感激
答案 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]
的操作,但这在这里可能是过大了。