当我处理长度相同的数组时,我遇到了令人讨厌的形状不匹配问题,但只有一个是宽度一。例如:
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)。但是,我经常最终对数组的一列进行子集化,然后必须指定此重组。有办法避免这种情况吗?
答案 0 :(得分:5)
有两种简单的方法:
(x * y.T).T
或
x.reshape((-1,1)) * y
Numpy的broadcasting是一个非常强大的功能,它将完全按照您的意愿自动完成,但它希望数组的最后一个轴(或多个轴)具有相同的形状,而不是第一个轴。因此,您需要转置y
才能使其正常工作。
第二个选项与您正在执行的操作相同,但-1
被视为数组大小的占位符,这会减少一些输入。
答案 1 :(得分:4)
最受青睐的方法是使用“newaxis”,即
x[:, numpy.newaxis] * y
它非常易读且高效。