Посмотрите на a
на каждом шаге:
In [20]: a=np.array([[1,2,3],[3,2,3,4]])
In [21]: a
Out[21]: array([list([1, 2, 3]), list([3, 2, 3, 4])], dtype=object)
, поскольку внутренние списки различаются по длине, a
- это 1d объект dtype.
In [22]: len(a[0])
Out[22]: 3
In [23]: len(a[1])
Out[23]: 4
In [24]: a[1] = a[1][:3]
In [25]: a
Out[25]: array([list([1, 2, 3]), list([3, 2, 3])], dtype=object)
То, что мы изменили a[1]
, не изменит форму или тип d a
.
Это верно, даже если мы изменим списки на массивы:
In [26]: a[0] = np.array(a[0])
In [27]: a[1] = np.array(a[1])
In [28]: a
Out[28]: array([array([1, 2, 3]), array([3, 2, 3])], dtype=object)
Мы должны использовать что-то вроде stack
, чтобы объединить эти массивы в один:
In [29]: np.stack(a)
Out[29]:
array([[1, 2, 3],
[3, 2, 3]])
Это новый массив, а не модификация a
.
np.array(a)
также не переупаковывает a
.
Если исходные списки совпадают, результатом будет 2d. '
In [31]: a=np.array([[1,2,3],[3,2,3]])
In [32]: a
Out[32]:
array([[1, 2, 3],
[3, 2, 3]])
Будьте осторожны с этими потенциально неравными списками - при создании объекта Массивы - ненадежный запасной вариант.