Вы начинаете со списка массивов:
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')]
Создание массива из этого - 2d-массив со строкой dtype (поведение по умолчанию np.array
):
In [51]: var2 = np.array(var1)
In [52]: var2
Out[52]:
array([['String1'],
['String2']], dtype='<U9') # (2,1) shape
с указанием объект dtype по-прежнему создает массив (2,1)
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)
Если список содержит массивы различной длины, вы можете использовать np.array
, но, как показано, это не надежная конструкция (но распространенная, хотя бы по ошибке):
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)
A numpy
array массивов - странная птица и требует более замысловатой конструкции.