Python.ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()

时间:2016-11-26 10:25:36

标签: python numpy graphlab

我正在学习如何使用Graphlab进行机器学习。所以,我有四个列的数据集 - 有一个列'名称'和另一个'评论'。

现在,我希望通过产品名称对特定产品进行审核。所以,这就是我尝试但我保留错误 - ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()。

if (products['name'] == "Vulli Sophie the Giraffe Teether"):
    print (products['review'])

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-15-8607777f5c3b> in <module>()
----> 1 if (products['name'] == "Vulli Sophie the Giraffe Teether"):
      2     print products['review']

C:\Users\user\Anaconda2\envs\gl-env\lib\site-packages\graphlab\data_structures\sarray.pyc in __nonzero__(self)
    752         """
    753         # message copied from Numpy
--> 754         raise ValueError("The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()")
    755 
    756     def __bool__(self):

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

编辑 -

  if (products['name'] == "Vulli Sophie the Giraffe Teether"):
        print products['name']
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-16-1be157eebb1a> in <module>()
----> 1 if (products['name'] == "Vulli Sophie the Giraffe Teether"):
      2     print products['name']

C:\Users\user\Anaconda2\envs\gl-env\lib\site-packages\graphlab\data_structures\sarray.pyc in __nonzero__(self)
    752         """
    753         # message copied from Numpy
--> 754         raise ValueError("The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()")
    755 
    756     def __bool__(self):

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

2 个答案:

答案 0 :(得分:0)

错误消息告诉您products['name']是一个列表,因此您不能使用简单的比较器。

如果您想检查products['name']的任何值是否等于您的值 标题,您应该将条件更改为:

if "Vulli Sophie the Giraffe Teether" in products['name']:
    # other stuff

希望这有帮助。

答案 1 :(得分:0)

我所知道的 Graphlab 就是似乎使用numpy模块来提供数组...这就是说让我们从一些类似的数据开始你的

In [21]: import numpy as np

In [22]: prods = np.array((['a', 'b', 'c'], [1, 2, 3])) 

In [23]: prods
Out[23]: 
array([['a', 'b', 'c'],
       ['1', '2', '3']], 
      dtype='<U1')

我们有一个名称矢量(&#39; a&#39;,&#39; b&#39;&#39; c&#39;)和评论分数(1,{{1 },2)。

接下来,要查找特定名称的位置,请使用矢量化布尔表达式,如下所示

3

如您所见,结果是布尔值的向量。

In [24]: prods[0] == 'b' Out[24]: array([False, True, False], dtype=bool) 的美妙之处在于你可以用奇特的模式处理向量

numpy

我写的是,In [26]: prods[1, prods[0] == 'b'] Out[26]: array(['2'], dtype='<U1') 选择第一个索引prods(评论得分),第二个索引扫描布尔值的向量,只使用{{1物品。

如果你没有匹配会怎么样?没有

1

此特定值为True,因此您可以像这样使用它(未经测试)

In [27]: prods[1, prods[0] == 'd']
Out[27]: 
array([], 
      dtype='<U1')