可以运行以下代码而不会出现错误:
>>> 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?
why would you want to squeeze such a list?
我正在用一本内部词典来获取同义词和首字母缩略词的引理。有些时候,当输入的单词不在我的字典中时,我选择保留它作为引理,而有些时候我更喜欢删除这个单词。引理被定义为单词的数组。在
为了跟踪引理在输入文本中的实际位置,我想在返回列表中添加0单词的引理,一个空列表。乍一看,我以为挤压会自动删除空列表。。。在
问题是您不能将
['', []]
转换为数组,因为缺少正确定义的维度。这可以从简单调用np.array(['', []])
导致错误这一事实中看出:根据docs,它指出参数输入数据}不是(并非所有列表都是{})。不幸的是,并没有一种非常简单的防故障方法来确定它是否类似于数组,如here:
a
必须是array_like
,而{如果您愿意,您可以这样做:
^{pr2}$np.squeeze([[''], []])
,因为([[''], []])
具有正确定义的维度,因此可以转换为numpy
数组:np.squeeze
实际上只是a.squeeze()
数组方法的包装器。你的参数是一个列表,它没有这个方法。因此函数尝试从列表中生成一个数组:您正在尝试从对象、字符串和列表的混合中生成数组。在
^{pr2}$如果告诉它生成一个object dtype数组,它可以。在
但是在没有该规范的情况下,它首先尝试生成stringdtype数组。但是在将列表放入字符串槽中时出现问题,因此出现错误。在
除了好奇,你为什么要
squeeze
这样的列表?在如果列表是第一个,
np.array
可以生成一个对象数组:这只是
np.array
在给定不同大小和/或类型的项目列表时如何工作的怪癖之一。它的主要任务是从一系列整齐嵌套的数字或字符串列表中生成一个数组。在考虑到一系列的项目,它必须“猜测”你真正想要什么;有时它猜错了,有时它会放弃。在
相关问题 更多 >
编程相关推荐