Модификация массива возвращает неправильный вывод - PullRequest
0 голосов
/ 28 марта 2019

Я новичок в 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])])]

Любые предложения о том, как это исправить?

Ответы [ 3 ]

1 голос
/ 28 марта 2019

Просто назначьте последнюю строку массива новой "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]]
0 голосов
/ 28 марта 2019
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
0 голосов
/ 28 марта 2019

Если вы хотите просто сложить векторы друг над другом, используйте 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]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...