ValueError: operands could not be broadcast together with shapes (2501,201) (2501,)

ValueError: operands could not be broadcast together with shapes (2501,201) (2501,)

我是 python 的新手,所以请多关照。

我正在尝试使用 np.logical_or 函数比较两个 Numpy 数组。当我 运行 下面的代码出现错误时
Percentile = np.logical_or(data2 > Per1, data2 < Per2) 行说明

ValueError: operands could not be broadcast together with shapes (2501,201) (2501,)

data = 1st Array

data2 = 2nd Array

Per1 = np.percentile(data, 10, axis=1)

Per2 = np.percentile(data, 90, axis=1)

Percentile = np.logical_or(data2 > Per1, data2 < Per2)

print(Percentile)

我已经检查了两个数组的形状,它们看起来都具有相同的形状 (2501,201) (2501,201)。因此,我很难理解为什么会出现此错误,将不胜感激任何帮助。

您需要添加维度(通过使用 [:, None]Per1Per2 使它们可广播到数据。

Percentile = np.logical_or(data2 > Per1[:, None], data2 < Per2[:, None])

如果检查 Per1 或 Per2 的形状,您会看到它的值为 (2501,)(因为您沿轴 1 取百分位数),因此这两个表达式都会引发错误 data2 > Per1data2 < Per2,为了使您的代码正常工作,您需要使用 reshape 制作兼容形状的两个操作数,这会将您的行向量转换为列向量:

Per1 = np.percentile(data, 10, axis=1).reshape(-1, 1)
Per2 = np.percentile(data, 90, axis=1).reshape(-1, 1)