Массив чисел в матрице (2х1) без изменения ее формы - PullRequest
0 голосов
/ 11 мая 2018

Я сделал массив формы = [2,1] и назначил массив с одномерным массивом формы [3,1].Возникающая проблема заключается в том, что форма массива изменяется с [2,1] на [2,1,3].Как я могу заставить компилятор понять, что одномерный массив должен рассматриваться как один элемент

k = [[1,2,3], [4,5,6]]

a = np.zeros (shape = [2,1], dtype = float)

a = np.array ([[k [0]], [k [1]]])

a.shape

(2, 1, 3)

a= np.array ([[np.asarray (k [0])], [np.asarray (k [1])]])

a.shape

(2, 1, 3)

1 Ответ

0 голосов
/ 11 мая 2018
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 = ... назначает новый массив переменной; он не изменяет существующий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...