Повторите каждую строку n раз в матрице и добавьте столбец 1 * n рядом с каждой частью

1

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

Представь, вот моя матрица

A = [[11, 12], [13, 14], [15, 16], [17, 18]]

и я хочу повторение 2 раза для каждой строки, тогда результат будет

B = [[1, 11, 12], [2, 11, 12], [1, 13, 14], [2, 13, 14], [1, 15, 16], [2, 15, 16], [1, 17, 18], [2, 17, 18]]

Я уже пробовал ниже код

k = 2
B = [A] * k

что дает мне ошибку памяти в моем полном коде

Я не знаю, как использовать панда, и я использую NumPy. Есть ли способ эффективно использовать NumPy без ошибок памяти, в моем случае,

И получить правильный ответ?

PS: я не добавил свой код, так как работаю с огромным набором данных, плюс это всего лишь маленький кусочек всего кода!

  • 0
    Предоставленный вами код не вызывает «ошибки памяти» или каких-либо других ошибок. Пожалуйста, предоставьте минимальный, полный и проверяемый пример .
  • 0
    [A]*k создает массив длины k с каждым полем, установленным в A Если вы измените A , все элементы массива массивов также изменятся (потому что они имеют одну и ту же ссылку). Если вы используете A*k вы получите новый массив, который не разделяет память с A и, таким образом, может безопасно управляться.
Теги:
python-3.x

2 ответа

1
Лучший ответ

Ты должен сделать

k = 2
B = A * k 

вместо

k = 2
B = [A] * k

Чтобы добавить новый столбец индекса, вы можете сделать это

for i, sub_list in B:
    sub_list.insert(i, i+1) # starting from index 1 instead of 0

Поскольку списки являются изменяемыми, нет необходимости переназначать B.

0
#Here is my reply which solved memory problem too.
#I guess memory problem was due to exceeding array limit!!!
#I do not know HOW but below code was practically correct. 
A = np.repeat(A, k, axis=0)
AB = [[1], [2], [3], [4]]
AB = np.reshape(AB, (-1,1))
AB = np.tile(AB,((len(A)//k),1))
B = np.hstack((AB, A))

Ещё вопросы

Сообщество Overcoder
Наверх
Меню