In [1]: k = [[1,2,3],[4,5,6]]
Построение массива из элементов k
:
In [2]: a = np.array([[k[0]],[k[1]]])
In [3]: a
Out[3]:
array([[[1, 2, 3]],
[[4, 5, 6]]])
In [4]: a.shape
Out[4]: (2, 1, 3)
Если мы снимаем слой с []:
In [7]: a = np.array([k[0],k[1]])
In [8]: a
Out[8]:
array([[1, 2, 3],
[4, 5, 6]])
In [9]: a.shape
Out[9]: (2, 3)
Мы можем инициализировать массив dtype объекта и заполнить его значениями из k
:
In [10]: a =np.empty(2, object)
In [11]: a
Out[11]: array([None, None], dtype=object)
In [12]: a[:] = k
In [13]: a
Out[13]: array([list([1, 2, 3]), list([4, 5, 6])], dtype=object)
In [14]: a.shape
Out[14]: (2,)
Здесь назначение a[:]=k
работало нормально; иногда мы получаем ошибки формы / трансляции и, возможно, придется присваивать элемент за элементом.
Например, с:
In [15]: a =np.empty((2,1), object)
In [16]: a[:] = k
...
ValueError: cannot copy sequence with size 3 to array axis with dimension 1
In [17]: a[:,0] = k # the 1d assignment as before
In [18]: a
Out[18]:
array([[list([1, 2, 3])],
[list([4, 5, 6])]], dtype=object)
Обратите внимание, что мы должны использовать индексированное присваивание для изменения значений существующего массива. a = ...
назначает новый массив переменной; он не изменяет существующий.