#python #arrays #numpy
#python #массивы #numpy
Вопрос:
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. что вы пытаетесь сделать?
2. Мне нужно разделить массив numpy на 4 части и брать по одной части за раз, а остальные три объединить.
Ответ №1:
Вы смешиваете списки и массивы. Обратите внимание на то, что вы получаете на каждом этапе:
Начните со списка кортежей:
In [126]: test = [(0,1,2),(9,0,1),(0,1,3),(0,1,8)]
Создайте 2d-массив:
In [127]: arr = np.array(test)
In [128]: arr
Out[128]:
array([[0, 1, 2],
[9, 0, 1],
[0, 1, 3],
[0, 1, 8]])
Разделить на список — по одной «строке» на элемент, но каждый из них представляет собой 2d-массив. Вопрос, всегда ли число разделения будет такого размера?
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]])
является ли define для списков оператором объединения. Для массивов это сложение. concatenate
(наряду с различными stack
вариантами) — это функция объединения массива.