在Python中重塑数组以进行乘法/除法
我在处理数组的时候遇到了一个烦人的形状不匹配问题。虽然数组的长度是一样的,但其中一个数组的宽度只有1。举个例子:
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 个回答
4
推荐的方法是使用一个叫“newaxis”的东西,也就是
x[:, numpy.newaxis] * y
这样写起来既清晰又高效。
5
有两种比较简单的方法:
(x * y.T).T
或者
x.reshape((-1,1)) * y
Numpy的广播功能非常强大,可以自动完成你想要的操作,但它要求数组的最后一个维度(或多个维度)形状要一致,而不是第一个维度。因此,你需要对y
进行转置才能正常工作。
第二种选择和你现在做的差不多,不过-1
被当作数组大小的占位符,这样可以减少一些输入的内容。