Python 如何在使用numpy重复索引时指定列[用于np.add.at()]
我试图将加法运算符应用到一个数组中,在这个数组中,我希望重复的索引指示重复的加法操作。从Python数据科学书籍()中,似乎可以使用Python 如何在使用numpy重复索引时指定列[用于np.add.at()],python,arrays,numpy,indexing,array-broadcasting,Python,Arrays,Numpy,Indexing,Array Broadcasting,我试图将加法运算符应用到一个数组中,在这个数组中,我希望重复的索引指示重复的加法操作。从Python数据科学书籍()中,似乎可以使用np.add.at(原始矩阵、索引、要添加的内容),但我不知道如何指定要对列而不是行进行操作的索引 e、 g.虚拟示例 # Create Array A = np.arange(12) A = A.reshape(4,3) print(A) 给予 及 给予 [[1 1] [1 1] [1 1] [1 1]] 我想执行操作A[:,[0,0]]+=B,但使用重
np.add.at(原始矩阵、索引、要添加的内容)
,但我不知道如何指定要对列而不是行进行操作的索引
e、 g.虚拟示例
# Create Array
A = np.arange(12)
A = A.reshape(4,3)
print(A)
给予
及
给予
[[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]]
,因为这会产生语法错误(似乎索引矩阵不能包含:
字符?)
谢谢
这也可以用s
as编写
np.add.at(A, np.s_[:, [0,0]], 1)
s
是一个类对象,它允许我们使用索引符号创建必要的元组。在索引上下文中,Python解释器将:
转换为切片
对象
In [19]: np.s_[:, [0,0]]
Out[19]: (slice(None, None, None), [0, 0])
文档说
I
可以是一个包含切片对象的元组。我猜(片(无),[0,0])
应该可以工作。现在无法测试。谢谢,确实有效。如果你把它作为一个答案(最好有一些解释,关于切片是如何工作的,请?),那么我可以接受。干杯
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]])
np.add.at(A, np.s_[:, [0,0]], 1)
In [19]: np.s_[:, [0,0]]
Out[19]: (slice(None, None, None), [0, 0])