重塑python中的数组乘法/除法

时间:2011-09-18 19:36:57

标签: python numpy shape

当我处理长度相同的数组时,我遇到了令人讨厌的形状不匹配问题,但只有一个是宽度一。例如:

import numpy as np
x = np.ones(80)
y = np.ones([80, 100])
x*y 

ValueError: shape mismatch: objects cannot be broadcast to a single shape

简单的解决方案是y * x.reshape(x.shape [0],1)。但是,我经常最终对数组的一列进行子集化,然后必须指定此重组。有办法避免这种情况吗?

2 个答案:

答案 0 :(得分:5)

有两种简单的方法:

(x * y.T).T

x.reshape((-1,1)) * y

Numpy的broadcasting是一个非常强大的功能,它将完全按照您的意愿自动完成,但它希望数组的最后一个轴(或多个轴)具有相同的形状,而不是第一个轴。因此,您需要转置y才能使其正常工作。

第二个选项与您正在执行的操作相同,但-1被视为数组大小的占位符,这会减少一些输入。

答案 1 :(得分:4)

最受青睐的方法是使用“newaxis”,即

x[:, numpy.newaxis] * y

它非常易读且高效。