Ошибка при объединении разделенной части массива numpy - PullRequest
0 голосов
/ 14 марта 2019
test = [(0,1,2),(9,0,1),(0,1,3),(0,1,8)]
test=np.array(test)
test = np.array_split(test, 4)
t_0 = test[:0]
t_1 = test[0]
new_test= t_0+test[1:]
print(new_test)  

Это дает мне следующий ответ: [array([[9, 0, 1]]), array([[0, 1, 3]]), array([[0, 1, 8]])]

Принимая во внимание, что я стремлюсь к [(9,0,1),(0,1,3),(0,1,8)], если я выберу первый набор из теста.

1 Ответ

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

Вы путаете списки и массивы.Обратите внимание на то, что вы получаете на каждом этапе:

Начните со списка кортежей:

In [126]: test = [(0,1,2),(9,0,1),(0,1,3),(0,1,8)]                              

Создайте двумерный массив:

In [127]: arr = np.array(test)                                                  
In [128]: arr                                                                   
Out[128]: 
array([[0, 1, 2],
       [9, 0, 1],
       [0, 1, 3],
       [0, 1, 8]])

Разделите на список- по одной строке на элемент, но каждый из них представляет собой двумерный массив.Вопрос, всегда ли будет разделенное число такого размера?

In [129]: alist = np.array_split(arr, arr.shape[0])                             
In [130]: alist                                                                 
Out[130]: 
[array([[0, 1, 2]]),
 array([[9, 0, 1]]),
 array([[0, 1, 3]]),
 array([[0, 1, 8]])]

Сублисты:

In [131]: alist[:0]                                                             
Out[131]: []
In [132]: alist[1:]                                                             
Out[132]: [array([[9, 0, 1]]), array([[0, 1, 3]]), array([[0, 1, 8]])]

Присоединение к списку:

In [133]: alist[:0] + alist[1:]                                                 
Out[133]: [array([[9, 0, 1]]), array([[0, 1, 3]]), array([[0, 1, 8]])]

Похоже, что вы хотите, этосписок кортежей, например, с чего вы начали:

In [134]: test[:0] + test[1:]                                                   
Out[134]: [(9, 0, 1), (0, 1, 3), (0, 1, 8)]

Вы можете воссоздать 2d массив, применив concatenate к объединенным спискам массивов:

In [135]: np.concatenate(alist[:0] + alist[1:])                                 
Out[135]: 
array([[9, 0, 1],
       [0, 1, 3],
       [0, 1, 8]])
In [136]: np.concatenate(alist[:1] + alist[2:])                                 
Out[136]: 
array([[0, 1, 2],
       [0, 1, 3],
       [0, 1, 8]])
In [137]: np.concatenate(alist[:2] + alist[3:])                                 
Out[137]: 
array([[0, 1, 2],
       [9, 0, 1],
       [0, 1, 8]])

Но обратите внимание, чтоВы можете также легко получить любой из этих массивов с индексированием:

In [138]: arr[[0,1,3],:]                                                        
Out[138]: 
array([[0, 1, 2],
       [9, 0, 1],
       [0, 1, 8]])

И с помощью помощника r_ вы можете построить индексы из диапазонов:

In [139]: np.r_[:2, 3:4]                                                        
Out[139]: array([0, 1, 3])
In [140]: arr[np.r_[:2, 3:4],:]                                                 
Out[140]: 
array([[0, 1, 2],
       [9, 0, 1],
       [0, 1, 8]])

Вы также можете сделатьобъединение после индексации:

In [141]: np.concatenate([arr[:2,:], arr[3:,:]], axis=0)                        
Out[141]: 
array([[0, 1, 2],
       [9, 0, 1],
       [0, 1, 8]])

+ определено для списков в качестве оператора соединения.Для массивов это дополнение.concatenate (вместе с различными вариантами stack) - это функция соединения с массивом.

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