Добавить один элемент в массив в numpy


у меня есть массив numpy, содержащий:

[1, 2, 3]

Я хочу создать массив, содержащий:

[1, 2, 3, 1]

то есть, я хочу добавить первый элемент в конец массива.

я попробовал очевидное:

np.concatenate((a, a[0]))

, но я получаю сообщение об ошибке, говорящее ValueError: arrays must have same number of dimensions

Я не понимаю этого-массивы оба просто 1D массивы.

8 55

8 ответов:

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

numpy.append(a, a[0])

a[0] - Это не массив, это первый элемент a и поэтому не имеет размеров.

попробуйте использовать a[0:1] вместо этого, который возвращает первый элемент a внутри одного элемента массива.

попробуй такое

np.concatenate((a, np.array([a[0]]))

http://docs.scipy.org/doc/numpy/reference/generated/numpy.concatenate.html

concatenate требует, чтобы оба элемента были массивом, однако a[0] не является массивом. Вот почему это не работает.

t = np.array([2, 3])
t = np.append(t, [4])

Это может быть немного перебор, но я всегда использовать np.take функция для любого обертывания индексирования:

>>> a = np.array([1, 2, 3])
>>> np.take(a, range(0, len(a)+1), mode='wrap')
array([1, 2, 3, 1])

>>> np.take(a, range(-1, len(a)+1), mode='wrap')
array([3, 1, 2, 3, 1])

эта команда,

numpy.append(a, a[0])

не изменяет a массив. Однако, он возвращает новый измененный массив. Так что, если a модификация необходима, то

a = numpy.append(a,a[0])

необходимо использовать.

при добавлении только один раз или один раз время от времени, используя np.append на вашем массиве должно быть хорошо. Недостатком этого подхода является то, что память выделяется для совершенно нового массива каждый раз, когда он вызывается. При выращивании массива для значительного количества образцов было бы лучше либо предварительно выделить массив (если известен общий размер), либо добавить в список и преобразовать в массив после этого.

используя np.append:

b = np.array([0])
for k in range(int(10e4)):
    b = np.append(b, k)
1.2 s ± 16.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

использование списка python преобразование в массив после этого:

d = [0]
for k in range(int(10e4)):
    d.append(k)
f = np.array(d)
13.5 ms ± 277 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

предварительное выделение массива numpy:

e = np.zeros((n,))
for k in range(n):
    e[k] = k
9.92 ms ± 752 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

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

85.1 ms ± 561 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

давайте a=[1,2,3] и вы хотите, чтобы это было [1,2,3,1].

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

np.append(a,1)

здесь 1-это int, это может быть строка, и она может принадлежать или не принадлежать элементам в массиве. Отпечатки пальцев:[1,2,3,1]