我试图将加法运算符应用于要重复索引以指示重复加法运算的数组。从Python数据科学书(https://jakevdp.github.io/PythonDataScienceHandbook/02.07-fancy-indexing.html)中,似乎可以使用np.add.at(original matrix, indices, thing to add)
来做到这一点,但是我不知道如何指定对列而不是行进行操作的索引。
例如虚拟示例
# Create Array
A = np.arange(12)
A = A.reshape(4,3)
print(A)
给予
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
和
# Create columns to add to A (in reality, all values won't be the same)
B = np.ones_like(A[:, [0,0]])
print(adder)
给予
[[1 1]
[1 1]
[1 1]
[1 1]]
我想执行操作A[:, [0, 0]] += B
,但要使用重复索引指示重复操作的系统(因此,在这种情况下,B的两列都添加到列0中)。结果应为:
[[ 2 1 2]
[ 5 4 5]
[ 7 7 8]
[ 11 10 11]]
我相信可以使用np.add.at(A, I, B)
完成此操作,但是我如何指定索引I
对应于[:, [0,0]]
,因为这样会产生语法错误(似乎索引矩阵可以不包含:
字符?)。
谢谢
答案 0 :(得分:1)
In [12]: A = np.arange(12).reshape(4,3)
In [13]: np.add.at(A, (slice(None), [0,0]), 1)
In [14]: A
Out[14]:
array([[ 2, 1, 2],
[ 5, 4, 5],
[ 8, 7, 8],
[11, 10, 11]])
这也可以用s_
写为
np.add.at(A, np.s_[:, [0,0]], 1)
s_
是一个类对象,它使我们可以使用索引符号来创建必要的元组。在索引上下文中,Python解释器将:
转换为slice
对象。
In [19]: np.s_[:, [0,0]]
Out[19]: (slice(None, None, None), [0, 0])