Добавить одномерный массив NumPy в новое значение X двумерного массива NUMPY. - PullRequest
0 голосов
/ 09 марта 2019

Я пытаюсь добавить одномерный массив numpy к двумерному, поэтому одномерный вставляется вместо другого значения x.

Пример:

all_polys = [[5,6], [8,9]] (до ошибки внизу в ней еще ничего не хранится)

поли = [1,2]

Ожидаемый результат:

all_polys = [[5,6], [8,9], [1,2]]

Мой код:

all_polys = numpy.array([[]])
poly = np.expand_dims(poly, axis=0)
print(poly)
print(all_polys)
all_polys = np.concatenate(all_polys, poly)

Ошибка:

TypeError: в скалярный индекс могут быть преобразованы только целочисленные скалярные массивы

Вывод на печать до ошибки:

[['400' '815' '650' '815' '650' '745' '400' '745']] (поли с добавленным размером)

[] (all_polies)

Это действительно расстраивает меня. Что я делаю не так? Наверное, это маленькая деталь, которую я упустил из виду.

Ответы [ 4 ]

1 голос
/ 09 марта 2019

Начиная с 2d-массива и 1d-массива:

In [26]: all_polys = np.array([[5,6],[8,9]])                                    
In [27]: poly = np.array([1,2])                                                 

vstack делает хорошую работу, чтобы убедиться, что все входные данные являются 2d, а затем объединяет:

In [28]: np.vstack((all_polys, poly))                                           
Out[28]: 
array([[5, 6],
       [8, 9],
       [1, 2]])

У вас были правильные иды с expand_dims:

In [29]: np.concatenate((all_polys, np.expand_dims(poly, axis=0)))              
Out[29]: 
array([[5, 6],
       [8, 9],
       [1, 2]])

Но np.array([[]]) - плохая отправная точка.Зачем использовать это?Вы делаете это итеративно?

Для итеративной работы мы рекомендуем использовать списки:

In [30]: alist = []                                                             
In [31]: alist.append([5,6])                                                    
In [32]: alist.append([8,9])                                                    
In [33]: alist.append([1,2])                                                    
In [34]: np.array(alist)                                                        
Out[34]: 
array([[5, 6],
       [8, 9],
       [1, 2]])

Я не рекомендую использовать np.append.Он используется слишком часто.

0 голосов
/ 09 марта 2019

Вам просто нужно сделать это:

all_polys = np.concatenate((all_polys, poly[None,:]), axis=0)

Мы объединяем два массива: all_polys, который выглядит как [[5,6],[8,9]], и poly[None,:], который выглядит как [[1.2]].

По axis=0 мы указываем, что конкатенация должна происходить вдоль самого внешнего (первого) измерения этих массивов.

0 голосов
/ 09 марта 2019

вы должны сделать это следующим образом.

arr = [old array]
newArr = numpy.append(arr, [new_array])

Использование функции добавления будет работать.

0 голосов
/ 09 марта 2019

Вы можете попробовать функцию добавления вместо expand_dims

import numpy as np
all_polys = [[5,6],
             [8,9]]
all_polys = np.append(all_polys,[ [1,2] ], axis=0)
print(all_polys)
#Output=
#all_polys = [[5,6],
#             [8,9],
#             [1,2]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...