Я хочу повторить каждую строку моей матрицы и добавить еще один столбец рядом с ней.
Представь, вот моя матрица
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: я не добавил свой код, так как работаю с огромным набором данных, плюс это всего лишь маленький кусочек всего кода!
Ты должен сделать
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.
#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))
[A]*k
создает массив длиныk
с каждым полем, установленным вA
Если вы изменитеA
, все элементы массива массивов также изменятся (потому что они имеют одну и ту же ссылку). Если вы используетеA*k
вы получите новый массив, который не разделяет память сA
и, таким образом, может безопасно управляться.