我有一个3x3的numpy数组,想要将每一列除以一个3x1的向量。我知道如何将每一行除以向量中的元素,但是无法找到解决方案来将每一列除以向量。
(arr_3x3.T/arr_3x1).T
让我们尝试几件事情:
In [347]: A=np.arange(9.).reshape(3,3)
In [348]: A
Out[348]:
array([[ 0., 1., 2.],
[ 3., 4., 5.],
[ 6., 7., 8.]])
In [349]: x=10**np.arange(3).reshape(3,1)
In [350]: A/x
Out[350]:
array([[ 0. , 1. , 2. ],
[ 0.3 , 0.4 , 0.5 ],
[ 0.06, 0.07, 0.08]])
因此,这将每一行分别除以不同的值。
In [351]: A/x.T
Out[351]:
array([[ 0. , 0.1 , 0.02],
[ 3. , 0.4 , 0.05],
[ 6. , 0.7 , 0.08]])
这将使每列除以不同的值
(3,3)
除以 (3,1)
=> 在列之间复制x
。
使用转置后,(1,3)
数组在行之间复制。
当使用.T
(转置)时,x
必须是二维的。一个(3,)
数组转置为一个(3,)
数组 - 也就是说,没有变化。
最简单的似乎是
A = np.arange(1,10).reshape(3,3)
b=np.arange(1,4)
A/b
A会是
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
而 b 将会是
array([1, 2, 3])
而且这个除法会产生
array([[1. , 1. , 1. ],
[4. , 2.5, 2. ],
[7. , 4. , 3. ]])
第一列按1
除以,第二列按2
除以,第三列按3
除以。
如果我错误地将您的列解释为行,请使用 .T 进行转换,就像 C_Z_ 在上面回答的那样。