У меня есть массив формы: (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
Что я делаю неправильно?
Число, например 123
Вы можете проверить этот пост: stackoverflow.com/questions/47517485/… Надеюсь, что это поможет вам.
Так что-то вроде np.r_[a,123][1:]
Является ли x_pred
массивом (1100)? является next_index
скаляром?
да. x_pred
— массив (1,100)
, а next_index
— скаляр.
Связано: NumPy добавляет против конкатенации
Также относится: когда я должен использовать hstack/vstack vs append vs concatenate vs column_stack
Вы можете сделать это с помощью 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
Даже с индексом tmp.size-1
?
Да, у меня есть x_pred = np.insert(x_pred[1:], x_pred.size-1, next_index)
и x_pred.size
есть 100
Какой следующий индекс? это используется внутри цикла?
Да, это используется внутри цикла. next_index
это поплавок
Я вижу, я пропустил, что у вас был двумерный массив 1x100, а не одномерный массив
Это исправлено сейчас
Добавить скаляр как список в списке, чтобы он имеет такое же количество измерений:
>>> 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]])
Что такое
something
?