#python #numpy #append
#питон #numpy #добавить #python
Вопрос:
В приведенном ниже коде я пытался использовать np.append
, но он дает мне только последнее значение, добавленное в цикле.
У меня есть два вложенных цикла for (один выполняется с индексом i
, другой с k
). Теперь я хочу использовать определенную функцию для разных индексов, и я хочу, чтобы результаты были сведены в один массив. Таким образом, чтобы каждая строка в массиве содержала результат для одного индекса.
Вот минимальный воспроизводимый пример:
import numpy as np
a = np.arange(0,2,1)
b = np.arange(3,5,1)
c = np.array([])
for i in range(0,2,1):
for k in range(0,2,1):
c = np.append(a[i],b[k])
print(c)
Результат таков [1 4]
. Но я хочу, чтобы один единственный вектор c
содержал ([0 3][0 4][1 3][1 4])
Комментарии:
1. Является ли использование
numpy/append
обязательным?
Ответ №1:
Вы создаете 1d массив вместо 2d. и np.append
вам нужно передать текущий массив и добавляющие элементы, и он вернет новый массив.
a = np.arange(0,2,1)
b = np.arange(3,5,1)
c = np.empty(shape=[0, 2])
for i in range(0,2,1):
for k in range(0,2,1):
c = np.append(c,[[a[i],b[k]]],axis=0)
print(c)
Вывод:
[[0. 3.]
[0. 4.]
[1. 3.]
[1. 4.]]
Комментарии:
1. @Felix Примечание: . np.append работает медленнее по сравнению с python
append
, поскольку numpy каждый раз создает новый массив.
Ответ №2:
Вас смущает синтаксис для np.append()
Используйте ниже для правильной реализации:
c = np.append(c,[a[i],b[k]])
Также для этого вы получите вывод, напечатанный как:
[0. 3. 0. 4. 1. 3. 1. 4.]
Я запутался в векторе, о котором вы говорите : ([0 3][0 4][1 3][1 4])
Указанное вами представление не является вектором, а выглядит как матрица с размерностью 4x2
, где .reshape() может вам помочь.
Если вы этого хотите, просто напишите: c.reshape((4,2))
что даст вам:
[[0. 3.]
[0. 4.]
[1. 3.]
[1. 4.]]
Комментарии:
1. Спасибо за ваш ответ. Да, это было просто неправильно… Я говорил о векторе, но вместо этого хотел создать матрицу.
2. @Felix Нет проблем, вы можете попробовать reshape() !
3. Итак, теперь возникла проблема с аргументом reshape, может быть, у вас есть решение для этого. Теперь я создал массив (на этот раз это действительно массив, одномерный со 100 записями) с помощью этого вложенного for-цикла. И теперь я попытался преобразовать этот (100,) вектор в (10,10) матрицу. Я пробовал это с
reshape
помощью andnp.reshape
, но он продолжает говорить мне: невозможно преобразовать массив размером 1 в форму (10,10). Я понятия не имею, почему этот массив должен иметь размер 1. В массиве ровно 100 записей…4. Редактировать: я решил это… Конечно, мне нужно выполнить
reshape
внешнюю часть цикла for, иначе Python попытается изменить массив в каждом цикле.