Python 基于不同numpy数组中的索引向numpy矩阵添加标量

Python 基于不同numpy数组中的索引向numpy矩阵添加标量,python,arrays,numpy,Python,Arrays,Numpy,我很抱歉,如果这个问题没有很好的框架。所以我宁愿用一个例子来解释。 我有一个numpy矩阵: a = np.array([[0.5, 0.8, 0.1], [0.6, 0.9, 0.3], [0.7, 0.4, 0.8], [0.8, 0.7, 0.6]]) 和另一个numpy阵列,如图所示: b = np.array([1, 0, 2, 2]) 在给定的条件下,b中的值将在范围内(a.shape[1])并且b.shape[1]==a.shape[0]。这就是我需要执行的操作 对于a的每个索

我很抱歉,如果这个问题没有很好的框架。所以我宁愿用一个例子来解释。 我有一个numpy矩阵:

a = np.array([[0.5, 0.8, 0.1], [0.6, 0.9, 0.3], [0.7, 0.4, 0.8], [0.8, 0.7, 0.6]])
和另一个numpy阵列,如图所示:

b = np.array([1, 0, 2, 2])
在给定的条件下,
b
中的值将在
范围内(a.shape[1])
并且
b.shape[1]==a.shape[0]
。这就是我需要执行的操作

对于a的每个索引
i
,以及b的相应索引
i
,我需要从
a[i]
的索引
j
中减去1,其中
j==b[i]

所以在我的例子中,
a[0]==0.50.80.1]
b[0]==1
。因此,我需要从
a[0][b[0]]
中减去
1
,这样
a[0]=[0.5,-0.2,0.1]
。必须对
a
的所有行执行此操作。有没有直接的解决方案,而不必逐一遍历所有行或列

谢谢。

请使用。请参阅下面的介绍:

import numpy as np

a = np.array([[0.5, 0.8, 0.1], [0.6, 0.9, 0.3], [0.7, 0.4, 0.8], [0.8, 0.7, 0.6]])
b = np.array([1, 0, 2, 2])

a[np.arange(a.shape[0]), b] -= 1

print(a)
输出

[[ 0.5 -0.2  0.1]
 [-0.4  0.9  0.3]
 [ 0.7  0.4 -0.2]
 [ 0.8  0.7 -0.4]]
[[ 0.5 -0.2  0.1]
 [-0.4  0.9  0.3]
 [ 0.7  0.4 -0.2]
 [ 0.8  0.7 -0.4]]
作为替代用途:

输出

[[ 0.5 -0.2  0.1]
 [-0.4  0.9  0.3]
 [ 0.7  0.4 -0.2]
 [ 0.8  0.7 -0.4]]
[[ 0.5 -0.2  0.1]
 [-0.4  0.9  0.3]
 [ 0.7  0.4 -0.2]
 [ 0.8  0.7 -0.4]]
其主要思想是:

np.arange(a.shape[0])  # shape[0] is equals to the numbers of rows
生成行的索引:

[0 1 2 3]

非常感谢。成功了!