可以运行以下代码并且不会出错:
[console]::Writeline( "strTestPath = {0}{1}" ,
$strTestPath , [Environment]::NewLine );
[console]::Writeline( "GetDirectoryName = {0}" ,
[IO.Path]::GetDirectoryName( $strTestPath ) );
[console]::Writeline( "GetFileName = {0}" ,
[IO.Path]::GetFileName( $strTestPath ) );
[console]::Writeline( "GetExtension = {0}" ,
[IO.Path]::GetExtension( $strTestPath ) );
[console]::Writeline( "GetFileNameWithoutExtension = {0}" ,
[IO.Path]::GetFileNameWithoutExtension( $strTestPath ) );
但是跑步:
>>> np.squeeze([''])
array('', dtype='<U1')
>>> np.squeeze([[]])
array([], dtype=float64)
返回以下错误:
>>> np.squeeze(['', []])
为什么会发生这种情况?!
修改
什么版本?
为什么要挤出这样的清单?
我使用内部词典来获取同义词和首字母缩略词的引理。有时候,当输入的单词不在我的字典中时,我选择将它作为一个引理,有时候我更喜欢放弃这个词。引理被定义为 n 字的数组。
为了跟踪引理在输入文本中的实际位置,我想在我的返回列表中添加 0 字的引理,一个空列表。乍一看,我认为挤压会自己放下空列表......
答案 0 :(得分: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
,而['', []]
不是({并非所有列表都为array_like
) 。不幸的是,没有一种非常简单的防故障方法可以确定它是否类似于数组,如here所述:
通常,在Python中以数组结构排列的数字数据可以通过使用array()函数转换为数组。最明显的例子是列表和元组。有关其使用的详细信息,请参阅array()的文档。某些对象可能支持阵列协议,并允许以这种方式转换为数组。一个简单的方法来确定对象是否可以使用array()转换为numpy数组,只需交互式地尝试它,看看它是否有效! (Python方式)。
如果您愿意,可以执行:np.squeeze([[''], []])
,因为([[''], []])
具有正确定义的维度,因此可以转换为numpy
数组:
>>> np.squeeze([[''], []])
array([list(['']), list([])], dtype=object)
答案 1 :(得分:2)
np.squeeze
实际上只是数组方法a.squeeze()
的包装器。您的参数是一个列表,没有该方法。因此该函数尝试从列表中生成一个数组:
In [325]: np.array(['', []])
....
ValueError: setting an array element with a sequence
您正在尝试从混合的对象,字符串和列表中创建数组。
In [326]: np.array(['', []],object)
Out[326]: array(['', list([])], dtype=object)
如果你告诉它创建一个对象dtype数组,它可以。
但是没有那个规范,它首先尝试制作字符串dtype数组。但是然后将列表插入字符串槽有问题 - 因此错误。
除了好奇心之外,你为什么要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])
考虑到各种各样的物品,它必须“猜测”你真正想要的东西;有时它会猜错,有时它会放弃。