修改数组以返回错误的输出

时间:2019-03-28 16:48:41

标签: python arrays 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])])]

关于如何解决此问题的任何建议?

3 个答案:

答案 0 :(得分: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]]

答案 1 :(得分:0)

如果您只想将向量堆叠在一起,请使用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]]

答案 2 :(得分:0)

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