【发布时间】:2016-06-10 06:29:55
【问题描述】:
我有一个 3x3 的 numpy 数组,我想用一个 3x1 的向量来划分它的每一列。我知道如何通过向量的元素来划分每一行,但我无法找到划分每一列的解决方案。
【问题讨论】:
我有一个 3x3 的 numpy 数组,我想用一个 3x1 的向量来划分它的每一列。我知道如何通过向量的元素来划分每一行,但我无法找到划分每一列的解决方案。
【问题讨论】:
最简单的好像是
A = np.arange(1,10).reshape(3,3)
b=np.arange(1,4)
A/b
将是
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_ 回答的那样。
【讨论】:
让我们尝试几件事:
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 是 2d 很重要。 (3,) 数组转置为 (3,) 数组 - 也就是说,没有变化。
【讨论】:
你可以转置你的数组来划分每一列
(arr_3x3.T/arr_3x1).T
【讨论】: