在Python中重塑数组以进行乘法/除法

3 投票
2 回答
2484 浏览
提问于 2025-04-17 02:32

我在处理数组的时候遇到了一个烦人的形状不匹配问题。虽然数组的长度是一样的,但其中一个数组的宽度只有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被当作数组大小的占位符,这样可以减少一些输入的内容。

撰写回答