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

mik*_*ike 3 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
Run Code Online (Sandbox Code Playgroud)

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

Joe*_*ton 5

有两种简单的方法:

(x * y.T).T
Run Code Online (Sandbox Code Playgroud)

要么

x.reshape((-1,1)) * y
Run Code Online (Sandbox Code Playgroud)

Numpy的广播是一个非常强大的功能,它将完全按照你想要的方式进行,但它希望阵列的最后一个轴(或多个轴)具有相同的形状,而不是第一个轴.因此,您需要转置y它才能工作.

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