Как вставить numpy массивы размера 1 в пустой массив numpy? - PullRequest
0 голосов
/ 23 февраля 2020

Я определяю два NumPy массива:

PREtrain_labels = np.asarray([inpLblsArray[0:80]])
train_labels = np.array([])
TRstore = 0
i = 0

while i < len(train_images):
  TRstore = np.asarray([PREtrain_labels.item(i)])
  np.append(train_labels, TRstore)
  i = i + 1

Здесь у меня есть массив NumPy PREtrain_labels, который содержит целые числа и вырезан из большего массива NumPy. Я определил пустой массив train_labels. Моя цель - заполнить пустой массив NumPy (train_labels) выбранным срезом целых чисел в массиве PREtrain_labels. Но есть одна загвоздка: я беру каждое целое число из массива PREtrain_labels и хочу, чтобы каждое целое было помещено в другой пустой массив, который называется TRstore. Затем я хочу взять массив TRstore NumPy и поместить его в пустой массив train_labels. Однако когда я запускаю код и печатаю окончательный массив train_labels, он пуст.

Как это можно исправить? Если np.append() - это неправильный метод, какой мне следует использовать? Приведенный выше код не будет работать в одиночку, поэтому я упрощаю приведенный ниже код до работоспособной версии. Заранее спасибо!

loopArr = np.array([1, 2, 3, 4, 5])
a = np.asarray([1, 2, 3, 4, 5])
target = np.array([])
store = 0
i = 0

while i < len(loopArr):
  store = np.asarray([a.item(i)])
  np.append(target, store)
  i = i + 1

print(target)

1 Ответ

0 голосов
/ 23 февраля 2020
In [30]: res = np.array([])                                                                    
In [31]: np.append(res, np.array(1))                                                           
Out[31]: array([1.])
In [32]: res                                                                                   
Out[32]: array([], dtype=float64)

Out[31} является массивом с 1 элементом, потому что res - это число с плавающей точкой. Но обратите внимание, что res не изменился. np.append - это просто плохо продуманная «обложка» для np.concatenate.

concatenate немного требовательна к размерам входов

In [33]: np.concatenate([ res, np.array(1)])                                                   
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-33-bb45ea1930d0> in <module>
----> 1 np.concatenate([ res, np.array(1)])

<__array_function__ internals> in concatenate(*args, **kwargs)

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 0 dimension(s)
In [34]: np.concatenate([ res, np.array([1])])                                                 
Out[34]: array([1.])

Это объединяет одно (0, ) массив формы с формой (1,) для получения (1,). Этот массив [] почти бесполезен.

concatenate занимает целый список массивов (или даже списки). Воспользуйтесь этим:

In [35]: np.concatenate([np.array([1]), np.array([2]), [3], [1,2,3]])                          
Out[35]: array([1, 2, 3, 1, 2, 3])

Но почему вы делаете append в oop? Почему бы не добавить список? Это работает на месте и относительно быстро и без ошибок. Зачем делать жизнь тяжелой для себя?

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