比较两个numpy数组的行方式ValueError

时间:2015-08-09 20:01:24

标签: python numpy

我想逐行比较两个NumPy数组并返回相同行数。

如果我使用以下代码:

a=np.array([[1,2],[3,4]])
b=np.array([[1,4],[2,3]])
comp= np.logical_and(np.equal(a,b))
correct=numpy.sum(comp)

我收到以下错误:

ValueError: invalid number of arguments

然而,这有效:

np.logical_and([True, False], [False, False])

这可能非常愚蠢,但我是NumPy的新手。请帮忙。

3 个答案:

答案 0 :(得分:4)

我认为你想要的东西类似于:

np.sum(np.all(np.equal(a, b), axis=1))

如果您愿意,可以简写以下内容:

np.sum(np.all(a == b, axis=1))

这将返回1

a = np.array([[1, 2], [3, 4]])
b = np.array([[1, 2], [5, 6]])

0代表:

a = np.array([[1, 2], [3, 4]])
b = np.array([[1, 3], [5, 6]])

答案 1 :(得分:2)

只是为了扩展@mgilson的答案。你有正确的想法,首先你做到了这一点:

a = np.array([[1,2],[3,4]])
b = np.array([[1,4],[2,3]])
np.equal(a, b)
>>>array([[ True, False],
   [False, False]], dtype=bool)

现在,您要将此传递给np.logical_and(),如果查看文档,则需要输入两个变量x1和x2(https://github.com/jfeldstein/jQuery.AjaxFileUpload.js)。

因此,如果你传入上面的数组,你会得到以下结果:

np.logical_and(np.array([[True, False], [False, False]]))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid number of arguments

这是因为np.array([[True,False],[False,True]])是一个单独的数组,即你只提供了一个x1值,并且没有给出x2值。这就是回溯告诉你'参数数量无效'的原因。您需要为此函数提供两个值。

@ zero323正确地给了你一个解决方案,就是将值解包到函数中。更具体地说,将第一个数组值[True,False]传递给x1,将[False,False]传递给x2:

>>> np.logical_and(*np.equal(a, b))
array([False, False], dtype=bool)

答案 2 :(得分:0)

这样的事情:

  getToken() {
return this.LoginResponse.token;
}