ValueError:操作数不能与形状(2501,201)(2501,)一起广播

时间:2018-07-18 14:45:24

标签: python numpy valueerror numpy-broadcasting operands

我是python的新手,所以请保持友好。

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

  

ValueError:操作数不能与形状(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)。因此,我在努力理解为什么会发生此错误的过程中,将不胜感激。

2 个答案:

答案 0 :(得分:0)

您需要添加维度(通过在[:, None]Per1上使用Per2使其可广播到数据中。

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

答案 1 :(得分:0)

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

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