Python Numpy:将数组列表映射到数组数组

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']

我试图将numpy数组列表(包含单个字符串)映射到数组数组数组。我之所以需要它,是因为我需要它以特定的格式保存到.mat文件中

我目前有以下情况:

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)