Numpy queeze“list”对象没有属性“queeze”

2024-04-29 15:18:09 发布

您现在位置:Python中文网/ 问答频道 /正文

可以运行以下代码而不会出现错误:

>>> np.squeeze([''])
array('', dtype='<U1')
>>> np.squeeze([[]])
array([], dtype=float64)

但是跑步:

^{pr2}$

返回以下错误:

Traceback (most recent call last):
File "C:\Users\leonardo.schettini\Documents\recrutai\recrutai\testenv\lib\site-packages\numpy\core\fromnumeric.py", line 1240, in squeeze
    squeeze = a.squeeze
AttributeError: 'list' object has no attribute 'squeeze'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\leonardo.schettini\Documents\recrutai\recrutai\testenv\lib\site-packages\numpy\core\fromnumeric.py", line 1242, in squeeze
    return _wrapit(a, 'squeeze')
File "C:\Users\leonardo.schettini\Documents\recrutai\recrutai\testenv\lib\site-packages\numpy\core\fromnumeric.py", line 42, in _wrapit
    result = getattr(asarray(obj), method)(*args, **kwds)
File "C:\Users\leonardo.schettini\Documents\recrutai\recrutai\testenv\lib\site-packages\numpy\core\numeric.py", line 492, in asarray
    return array(a, dtype, copy=False, order=order)
ValueError: setting an array element with a sequence

为什么会这样?!在


编辑:

what versions?

  • python==3.6
  • 数量==1.14.3

why would you want to squeeze such a list?

我正在用一本内部词典来获取同义词和首字母缩略词的引理。有些时候,当输入的单词不在我的字典中时,我选择保留它作为引理,而有些时候我更喜欢删除这个单词。引理被定义为单词的数组。在

为了跟踪引理在输入文本中的实际位置,我想在返回列表中添加0单词的引理,一个空列表。乍一看,我以为挤压会自动删除空列表。。。在


Tags: innumpylibpackageslinesitearrayusers
2条回答

问题是您不能将['', []]转换为数组,因为缺少正确定义的维度。这可以从简单调用np.array(['', []])导致错误这一事实中看出:

>>> np.array(['', []])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: setting an array element with a sequence

根据docs,它指出参数输入数据a必须是array_like,而{}不是(并非所有列表都是{})。不幸的是,并没有一种非常简单的防故障方法来确定它是否类似于数组,如here

In general, numerical data arranged in an array-like structure in Python can be converted to arrays through the use of the array() function. The most obvious examples are lists and tuples. See the documentation for array() for details for its use. Some objects may support the array-protocol and allow conversion to arrays this way. A simple way to find out if the object can be converted to a numpy array using array() is simply to try it interactively and see if it works! (The Python Way).

如果您愿意,您可以这样做:np.squeeze([[''], []]),因为([[''], []])具有正确定义的维度,因此可以转换为numpy数组:

^{pr2}$

np.squeeze实际上只是a.squeeze()数组方法的包装器。你的参数是一个列表,它没有这个方法。因此函数尝试从列表中生成一个数组:

In [325]: np.array(['', []])
....
ValueError: setting an array element with a sequence

您正在尝试从对象、字符串和列表的混合中生成数组。在

^{pr2}$

如果告诉它生成一个object dtype数组,它可以。在

但是在没有该规范的情况下,它首先尝试生成stringdtype数组。但是在将列表放入字符串槽中时出现问题,因此出现错误。在

除了好奇,你为什么要squeeze这样的列表?在


如果列表是第一个,np.array可以生成一个对象数组:

In [327]: np.array([[],''])
Out[327]: array([list([]), ''], dtype=object)

这只是np.array在给定不同大小和/或类型的项目列表时如何工作的怪癖之一。它的主要任务是从一系列整齐嵌套的数字或字符串列表中生成一个数组。在

In [328]: np.array([[1,2,3,4]])
Out[328]: array([[1, 2, 3, 4]])
In [329]: np.squeeze([[1,2,3,4]])
Out[329]: array([1, 2, 3, 4])

考虑到一系列的项目,它必须“猜测”你真正想要什么;有时它猜错了,有时它会放弃。在

相关问题 更多 >