Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在使用numpy重复索引时指定列[用于np.add.at()]_Python_Arrays_Numpy_Indexing_Array Broadcasting - Fatal编程技术网

Python 如何在使用numpy重复索引时指定列[用于np.add.at()]

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,但使用重

我试图将加法运算符应用到一个数组中,在这个数组中,我希望重复的索引指示重复的加法操作。从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
,但使用重复索引指示重复操作的系统(因此在本例中,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])