python了解数组乘法行为

时间:2016-05-24 19:03:41

标签: python numpy

我有两个带形状的数组:

z1.shape
(74L, 1L)

z2.shape
(74L,)

为什么在乘法时会产生74x74大小的数组:

z3 = np.multiply(z1,z2)
z3.shape
(74L, 74L)

我期待按元素乘法元素来实现z3的形状(74L,1L)

如何通过z1和z2

的元素乘法实现z3

3 个答案:

答案 0 :(得分:1)

你可以z1*z2[:,None]。额外的无索引将1D数组拉伸为列数组。

答案 1 :(得分:1)

做,

z3 = np.multiply(z1, z2.reshape(-1,1))

答案 2 :(得分:1)

要回答您的问题,您需要重塑任一阵列:

>>> np.multiply(z1.reshape(-1), z2).shape
(74,)

>>> np.multiply(z1, z2[:,np.newaxis]).shape
(74, 1)

除非z1, z2的形状相同,否则乘法(或任何函数)将被转换为外积(z1 * z1.T),从而形成(74,74)形状你的情况。在上面的两个例子中,

  • z1.reshape(-1)将第一个数组转换为第二个(74,)的形状;
  • z2[:,np.newaxis](或None代替np.newaxis)将第二个投射到第一个(74,1)的形状。