Как добавить в ndarray - PullRequest
       0

Как добавить в ndarray

0 голосов
/ 14 января 2020

Я новичок в Numpy библиотеке из Python и я не уверен, что я делаю здесь неправильно, не могли бы вы помочь мне с этим, пожалуйста?

Итак, я инициализирую свой ndarray вот так.

A = np.array([])

И затем я тренируюсь добавлять в этот массив A новый массив X, который имеет форму, подобную (1000,32,32), если имеет какое-либо значение.

 np.insert(A, X)

Проблема здесь в том, что если я проверяю ndarray A, то после этого он пустой, хотя ndarray X имеет элементы внутри. Не могли бы вы объяснить мне, что именно я делаю не так, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 14 января 2020
In [10]: A = np.array([])                                                                        
In [11]: A.shape                                                                                 
Out[11]: (0,)

In [13]: np.concatenate([A, np.ones((2,3))])                                                     
---------------------------------------------------------------------------
...
ValueError: all the input arrays must have same number of dimensions, but the array at index 0 has 1 dimension(s) and the array at index 1 has 2 dimension(s)

Итак, первое, что вам нужно узнать о массивах numpy, - это то, что они имеют shape и ряд измерений. Надеюсь, это сообщение об ошибке сброшено.

Конкатенация с другим 1d массивом работает:

In [14]: np.concatenate([A, np.arange(3)])                                                       
Out[14]: array([0., 1., 2.])

Но это всего лишь np.arange(3). Конкатенация ничего не делает для нас. Хорошо, вы можете себе представить, что начинаете с al oop вот так. Но не надо. Это неэффективно.

Вы можете легко объединить список массивов, если измерения соответствуют правилам, указанным в документации. Эти правила логичны, если вы серьезно относитесь к измерениям массивов.

In [15]: X = np.ones((1000,32,32))                                                               
In [16]: np.concatenate([X,X,X], axis=1).shape                                                   
Out[16]: (1000, 96, 32)
0 голосов
/ 14 января 2020

Обязательно напишите обратно в A, если вы используете np.append, как в A = np.append(A,X) - функции numpy верхнего уровня, такие как np.insert и np.append, обычно неизменяемы, поэтому, даже если они возвращает вам значение, это ваша работа, чтобы сохранить его. np.array любит выравнивать np.ndarray, если вы используете append, так что, честно говоря, я думаю, что вы просто хотите обычную list для A и , чтобы метод добавления был изменяемым, так что не нужно писать обратно.

>>> A = []
>>> X = np.ndarray((1000,32,32))
>>> A.append(X)

>>> print(A)
[array([[[1.43351171e-316, 4.32573840e-317, 4.58492919e-320, ...,
         1.14551501e-259, 6.01347002e-154, 1.39804329e-076],
        [1.39803697e-076, 1.39804328e-076, 1.39642638e-076, ...,
         1.18295070e-076, 7.06474122e-096, 6.01347002e-154],
        [1.39804328e-076, 1.39642638e-076, 1.39804065e-076, ...,
         1.05118732e-153, 6.01334510e-154, 3.24245662e-086],
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...