Как я могу добавить в конец массива numpy и удалить его с начала?

У меня есть массив формы: (1, 100), а именно:

[[1. 2. 3. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
  0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
  0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
  0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
  0. 0. 0. 55.]]

Я хочу что-то добавить (скажем, число вроде 123) в конец и удалить первый элемент, чтобы у меня было:

[[2. 3. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
  0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
  0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
  0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
  0. 0. 55. 123.]]

Который сохраняет первоначальную форму (1, 100)

Я стараюсь:

x_pred = np.append(x_pred, next_index, axis=1)

(x_pred — массив (1, 100), а next_index — скаляр)

Но я получаю сообщение об ошибке:

ValueError: all the input arrays must have same number of dimensions

Что я делаю неправильно?

Что такое something?

yatu 22.05.2019 15:17

Число, например 123

Shamoon 22.05.2019 15:18

Вы можете проверить этот пост: stackoverflow.com/questions/47517485/… Надеюсь, что это поможет вам.

PAYRE Quentin 22.05.2019 15:18

Так что-то вроде np.r_[a,123][1:]

yatu 22.05.2019 15:19

Является ли x_pred массивом (1100)? является next_index скаляром?

wwii 22.05.2019 15:57

да. x_pred — массив (1,100), а next_index — скаляр.

Shamoon 22.05.2019 15:57

Связано: NumPy добавляет против конкатенации

wwii 22.05.2019 16:09
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
6
8
2 967
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете сделать это с помощью roll.

a = np.zeros((1,10))

#roll and replace
a[0] = np.roll(a[0],-1)
a[0][-1] = new_value
Ответ принят как подходящий
import numpy as np
x_pred = np.zeros((1,100))
x_pred = np.insert(x_pred, x_pred.size, 123, 1)
x_pred = np.delete(x_pred, 0, axis=1)

x_pred печатает:

array([[  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
          0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
          0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
          0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
          0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
          0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
          0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
          0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
          0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
        123.]])

с размером 100


Ниже не работает для двумерного массива, но правильно для одномерного массива:

Используя вставку numpy, вы можете сделать это

import numpy as np
tmp = np.array([0,1,2,3])
tmp = np.insert(tmp[1:], tmp.size-1, 123)
# [  1,   2,   3, 123]

или больше похоже на ваш пример

import numpy as np
tmp = np.array([0,0,0,0])
tmp = np.insert(tmp[1:], tmp.size-1, 123)
# [  0,   0,   0, 123]

В np.insert() первый параметр — это массив для вставки, второй — это индекс, в который вы хотите вставить, а третий — значение для вставки.

tmp[1:] просто говорит все, кроме первого элемента (то есть 0-го элемента) до конца.

x_pred = np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0,])
x_pred = np.insert(x_pred[1:], x_pred.size-1, 123)

x_pred печатает:

array([  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
         0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
         0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
         0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
         0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
         0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
         0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
         0,   0,   0,   0,   0,   0,   0,   0, 123])

а также x_pred.size печатает 100

Я получаю IndexError: index 99 is out of bounds for axis 0 with size 0

Shamoon 22.05.2019 15:36

Даже с индексом tmp.size-1?

trker 22.05.2019 15:38

Да, у меня есть x_pred = np.insert(x_pred[1:], x_pred.size-1, next_index) и x_pred.size есть 100

Shamoon 22.05.2019 15:40

Какой следующий индекс? это используется внутри цикла?

trker 22.05.2019 15:46

Да, это используется внутри цикла. next_index это поплавок

Shamoon 22.05.2019 15:49

Я вижу, я пропустил, что у вас был двумерный массив 1x100, а не одномерный массив

trker 22.05.2019 15:54

Это исправлено сейчас

trker 22.05.2019 16:10

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

>>> a = np.array([[0,1,2,3]])
>>> a
array([[0, 1, 2, 3]])
>>> q = 123
>>> np.append(a[:,1:],[[q]], axis=1)
array([[  1,   2,   3, 123]])
>>>

Или

>>> b = np.array([[q]])
>>> np.concatenate([a[:,1:],b], 1)
array([[  1,   2,   3, 123]])
>>> np.concatenate([a[:,1:],[[q]]], 1)
array([[  1,   2,   3, 123]])

Другие вопросы по теме