Python 比较两个numpy数组中的特定元素时,会出现“使用a.any()或a.all()”错误?

Python 比较两个numpy数组中的特定元素时,会出现“使用a.any()或a.all()”错误?,python,numpy-ndarray,Python,Numpy Ndarray,我尝试遍历两个大小相同的numpy数组,查看共享索引的两个元素之间的差异是否超出了我选择的任意错误范围,然后使用相同的错误值更正该错误。然而,据我所知,我得到了一个错误,假设我正在尝试比较数组的所有值?这不是我想我在做的,但是编译器说的不是这样。如果我不能正确理解a.all文档,并且有更好的方法来实现这一点,我不会感到惊讶。 以下是我目前掌握的情况: x = (b-a)*np.random.random((100,1)) + a noise = 10*np.random.normal(size=

我尝试遍历两个大小相同的numpy数组,查看共享索引的两个元素之间的差异是否超出了我选择的任意错误范围,然后使用相同的错误值更正该错误。然而,据我所知,我得到了一个错误,假设我正在尝试比较数组的所有值?这不是我想我在做的,但是编译器说的不是这样。如果我不能正确理解a.all文档,并且有更好的方法来实现这一点,我不会感到惊讶。 以下是我目前掌握的情况:

x = (b-a)*np.random.random((100,1)) + a
noise = 10*np.random.normal(size=x.shape)
y = slope*x + y_int + noise 
y_true = slope*x + y_int
m = len(x)
sigma = 10 
for i in range(m):
    if (y[i] - y_true[i] > 0) and (abs(y[i] - y_true) >= sigma):
        y[i] -=sigma
    elif (y[i] - y_true[i] < 0) and (abs(y[i] - y_true) >= sigma):
         y[i] += sigma

我在想,也许我可以使用a.any来形成布尔数组,并在嵌套循环中迭代这些元素,但我不确定如何实现它。任何建议/指导都将不胜感激。很抱歉,这是一个错误。

这个答案主要是关于一个可以使用的改进的整体方法,尽管下面我添加了一些关于代码中特定错误的细节

在使用numpy时,可以通过编写以下内容完全避免循环,这是您应该始终关注的问题:

diff = y - y_true
y -= numpy.where(diff >= sigma, sigma, 0)
y += numpy.where(diff <= -sigma, sigma, 0)

编辑:我认为您遇到的具体错误与循环中的一个输入错误有关,在循环中,您错过了最后一个y_true的索引,您指的是y_true[I],然后因为数组和标量之间支持的任何二进制操作都会在整个数组中广播标量,最终结果是一个数组,而不是您想要的标量。但是您使用的是and,它不适用于数组。请参阅我之前关于logical_的评论,以及在逐个元素执行logical and时的评论,这就是当and的右操作数是布尔数组时,您看到的有关all的错误消息。

发布完整的回溯,以便我们看到哪一行有问题。你可以打印被比较的东西,看看它们到底在比较什么。如果printy[i]-y\u-true[i]>0和absy[i]-y\u-true>=sigma是一个数组,那么这就是您的问题。
numpy.logical_and(y - y_true > 0, numpy.abs(y - y_true) >= sigma)