0

我正在尝试绘制一些数据,并且从指出的行中收到此错误。我用谷歌搜索了这条线,但找不到关于这个问题的任何有意义的讨论。我是 Python 新手,所以我一直在尝试解决这些问题。

 pl.figure()
 ax = pl.subplot(111)
 ax.plot(Xk[:,0], Xk[:,1], '.')

 ERROR=>>> twos = (y == 2).nonzero()[0]
 for i in twos:
    imagebox = OffsetImage(X[i,:].reshape(28,28))
    location = Xk[i,0], Xk[i,1]
    ab = AnnotationBbox(imagebox, location, boxcoords='data', pad=0.)
    ax.add_artist(ab)

 pl.show()

这是错误信息

 AttributeError: 'bool' object has no attribute 'nonzero'

任何线索,似乎y都不是一个可比的实体。

我正在尝试从示例文件中按摩代码以获取我自己的东西,如果这有点多余,请原谅。

我很感激帮助。

4

2 回答 2

0

以下对我有用(来自 iPython):

In [11]: y = arange(5); (y==2).nonzero()[0]
Out[11]: array([2])

而以下没有:

In [13]: y = range(5);  (y==2).nonzero()[0]
------------------------------------------------------------
Traceback (most recent call last):
  File "<ipython console>", line 1, in <module>
AttributeError: 'bool' object has no attribute 'nonzero'

因此,正如@DSM 的评论所暗示的那样 - 确保 y 是一个 numpy 数组,而不仅仅是某个列表或任何其他对象

于 2012-10-25T14:30:46.293 回答
0

您正在尝试将某些内容分配给变量调用twos

twos = (y == 2).nonzero()[0]

Python 告诉你(y == 2)没有这样的属性。这就是逻辑,因为括号会导致对表达式进行评估,该表达式y == 2可以是Trueor False

在 python using.中,您试图访问某个实例的方法或属性。如果你是一个字符串,它有绑定到它的方法,那么所有字符串都有:

In [133]: A='lorem ipsum'
# pressed Tab
In [134]: A.
A.capitalize  A.endswith    A.isalnum     A.istitle     A.lstrip      A.rjust       A.splitlines  A.translate
A.center      A.expandtabs  A.isalpha     A.isupper     A.partition   A.rpartition  A.startswith  A.upper
A.count       A.find        A.isdigit     A.join        A.replace     A.rsplit      A.strip       A.zfill
A.decode      A.format      A.islower     A.ljust       A.rfind       A.rstrip      A.swapcase    
A.encode      A.index       A.isspace     A.lower       A.rindex      A.split       A.title       

如果您不熟悉 python、numpy 和 matplotlib,我建议您开始使用 IPython。你对python的学习会更顺畅。

作为 Tab 按的替代方法,您可以执行以下操作dir(someObject)

In [134]: dir(A)
Out[134]: 
['__add__',
 '__class__',
 '__contains__',
 '__delattr__',
 '__doc__',
 '__eq__',
  .... snipped...
 'startswith',
 'strip',
 'swapcase',
 'title',
 'translate',
 'upper',
 'zfill']
于 2012-10-25T03:47:10.860 回答