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]
到 Per1
和 Per2
使它们可广播到数据。
Percentile = np.logical_or(data2 > Per1[:, None], data2 < Per2[:, None])
如果检查 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)
我是 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]
到 Per1
和 Per2
使它们可广播到数据。
Percentile = np.logical_or(data2 > Per1[:, None], data2 < Per2[:, None])
如果检查 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)