NumPy数组按向量对列进行除法

5

我有一个3x3的numpy数组,想要将每一列除以一个3x1的向量。我知道如何将每一行除以向量中的元素,但是无法找到解决方案来将每一列除以向量。

3个回答

8
您可以将数组转置以根据每一列进行分割。
(arr_3x3.T/arr_3x1).T

2

让我们尝试几件事情:

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,)数组 - 也就是说,没有变化。


0

最简单的似乎是

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_ 在上面回答的那样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接