我是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)
。因此,我在努力理解为什么会发生此错误的过程中,将不胜感激。
答案 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)