我有一个3x3 numpy数组,我想用向量3x1划分它的每一列。我知道如何按向量的元素划分每一行,但我找不到划分每列的解决方案。
答案 0 :(得分:3)
您可以转置数组以划分每列
(arr_3x3.T/arr_3x1).T
答案 1 :(得分: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)
数组跨行复制。
使用x
(转置)时.T
为2d很重要。 (3,)
数组转换为(3,)
数组 - 即没有变化。
答案 2 :(得分: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_一样。