Python 基于不同numpy数组中的索引向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的每个索
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]
非常感谢。成功了!