Python Numpy:将数组列表映射到数组数组
我试图将numpy数组列表(包含单个字符串)映射到数组数组数组。我之所以需要它,是因为我需要它以特定的格式保存到.mat文件中 我目前有以下情况:Python Numpy:将数组列表映射到数组数组,python,numpy,Python,Numpy,我试图将numpy数组列表(包含单个字符串)映射到数组数组数组。我之所以需要它,是因为我需要它以特定的格式保存到.mat文件中 我目前有以下情况: var1 = [array(['String1'], dtype='<U9'), array(['String2'], dtype='<U9'), ...] var2 = np.asarray(var1) output when printing var2: [['String1'] ['String2'] ['String3']
var1 = [array(['String1'], dtype='<U9'), array(['String2'], dtype='<U9'), ...]
var2 = np.asarray(var1)
output when printing var2:
[['String1']
['String2']
['String3']
...]
var2
是一个NumPy数组,但当您打印NumPy数组时,它恰好显示类似于列表的内容,尽管如果您打印包含该内容的嵌套列表,您将看到它不是以垂直格式打印的
打印var1
在列表中的每个数组周围显示array(…)
的原因是var1
是一个list
,而不是NumPy数组。打印列表时,您会看到对象的字符串表示,这与打印时对象的显示方式不一定匹配。如果执行print(repr(var2))
操作,您将看到它周围的数组(…)
在任何情况下,都可以使用来检查对象的类型。从数组列表开始:
In [49]: var1 = [np.array(['String1'], dtype='<U9'), np.array(['String2'], dtype='<U9')]
In [50]: var1
Out[50]: [array(['String1'], dtype='<U9'), array(['String2'], dtype='<U9')]
指定对象数据类型仍然会生成(2,1)数组
要创建数组数组,必须首先创建一个“空白”数组,然后填充它:
In [55]: var3 = np.empty(2, object)
In [56]: var3
Out[56]: array([None, None], dtype=object)
In [57]: var3[:] = var1
In [58]: var3
Out[58]:
array([array(['String1'], dtype='<U9'), array(['String2'], dtype='<U9')],
dtype=object)
数组的numpy
数组很奇怪,需要更复杂的构造。添加预期输出添加预期输出你看不到数组(…)
,因为你打印了它,python决定只显示其中的数据。但是如果您使用类型(var2)
,则它是一个numpy数组。或者,如果您只是在python提示符中键入var2
,您就会看到您想要看到的内容。var2
中的每个元素也是数组。
In [51]: var2 = np.array(var1)
In [52]: var2
Out[52]:
array([['String1'],
['String2']], dtype='<U9') # (2,1) shape
In [53]: var3 = np.array(var1, object)
In [54]: var3
Out[54]:
array([['String1'],
['String2']], dtype=object) # the objects are python strings
In [55]: var3 = np.empty(2, object)
In [56]: var3
Out[56]: array([None, None], dtype=object)
In [57]: var3[:] = var1
In [58]: var3
Out[58]:
array([array(['String1'], dtype='<U9'), array(['String2'], dtype='<U9')],
dtype=object)
In [61]: np.array([np.array(['String1'], dtype='<U9'), np.array(['String2', 'string3'], dtype='<U9')])
Out[61]:
array([array(['String1'], dtype='<U9'),
array(['String2', 'string3'], dtype='<U9')], dtype=object)