#python #arrays #numpy
#python #массивы #numpy
Вопрос:
Я новичок в numpy и пытаюсь выполнить некоторую нарезку и индексацию с помощью массивов. Моя цель — взять массив и использовать нарезку и индексирование, чтобы возвести в квадрат последний столбец, а затем вычесть первый столбец из этого результата. Затем я хочу поместить новый столбец обратно в старый массив.
Я смог выяснить, как нарезать и проиндексировать столбец, чтобы получить результат, который я хочу для последнего столбца. Однако моя проблема заключается в том, что когда я пытаюсь поместить его обратно в мой исходный массив, я получаю неверный вывод (как показано ниже).
theNumbers = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]])
sliceColumnOne = theNumbers[:,0]
sliceColumnThree = theNumbers[:,3]**2
editColumnThree = sliceColumnThree - sliceColumnOne
newArray = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[editColumnThree]])
print("nums:n{}".format(newArray))
Я хочу, чтобы вывод был
[[ 1 2 3 15]
[ 5 6 7 59]
[ 9 10 11 135]
[ 13 14 15 243]]
Однако мой становится:
[list([1, 2, 3, 4]) list([5, 6, 7, 8]) list([9, 10, 11, 12])
list([array([ 15, 59, 135, 243])])]
Есть предложения о том, как это исправить?
Комментарии:
1. Удалите квадратные скобки со всего
editColumnThree
в строке, которая создаетnewArray
.
Ответ №1:
Просто назначьте последнюю строку массива numpy новой «theNumbers[3] = editColumnThree»
Код:
import numpy as np
theNumbers = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]])
sliceColumnOne = theNumbers[:,0]
sliceColumnThree = theNumbers[:,3]**2
editColumnThree = sliceColumnThree - sliceColumnOne
theNumbers[3] = editColumnThree
print("nums:n{}".format(theNumbers))
Вывод:
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]
[ 15 59 135 243]]
Ответ №2:
newArray = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[editColumnThree]])
print("nums:n{}".format(newArray))
таким образом, editColumnThree
это последняя строка, а не столбец. Вы можете использовать
newArray = theNumbers.copy() # if a copy is needed
newArray[:,-1] = editColumnThree # replace last (-1) column
Ответ №3:
Если вы просто хотите сложить векторы поверх друг друга, используйте vstack
:
import numpy as np
theNumbers = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]])
newNumbers = np.vstack(theNumbers)
print(newNumbers)
>>>[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]
[13 14 15 16]]
Но проблема здесь не только в том, что вам нужно сложить эти числа, вы смешиваете столбцы и строки. Вы меняете строку вместо столбца. Чтобы изменить столбец, обновите последний элемент в каждой строке:
import numpy as np
theNumbers = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]])
LastColumn = theNumbers[:,3]**2
FirstColumn = theNumbers[:,0]
editColumnThree = LastColumn - FirstColumn
for i in range(4):
theNumbers[i,3] = editColumnThree [i]
print(theNumbers)
>>>[[ 1 2 3 15]
[ 5 6 7 59]
[ 9 10 11 135]
[ 13 14 15 243]]