我有一个 2D numpy 数组 visrec
。如果我这样做
print visrec[0,:]
我得到这个输出:
[ a1 a2 a3 a4 a5 a6]
其中a1, a2,..
是dtype=float64
更清楚地说,visrec
是存储在 numpy.array
对象中的 1x6 矩阵。它最初是使用以下命令创建的:
visrec=numpy.array(numpy.zeros((1,6)))
在一个循环中,我修改 visrec
并将修改记录存储在列表中。我基本上将每个修改附加到列表 rec_history=[]
中。我使用这个命令:
rec_history.append(visrec[0,:])
然后,为了测试它,我只想使用以下命令打印 rec_history
的第一个元素:
print rec_history[0]
输出采用以下格式:
[ a1 a2 a3 a4 a5 a6]
到目前为止,一切都如我所料。但是,如果我尝试打印 rec_history
的多个元素,我会得到意外的输出。我发出这个命令:
print rec_history[0:3]
并获得以下输出:
[array([ a1, a2, a3, a4, a5 ,
a6]), array([ b1, b2, b3,
b4, b5, b6]), array([ c1, c2, c3,
c4, c5, c6])]
这正常吗?我实际上是将数组对象存储在我的记录列表中吗?如果是这种情况,为什么如果我只打印列表的一个元素,我不会得到不同类型的输出?这与函数print
有关吗?我不想存储数组对象,我想将数字列表存储在记录列表中。我怎样才能做到这一点?我了解 matlab,但是我想它对我没有帮助。
最佳答案
您正在存储原始数组的切片,并且由于您从 rec_history[0:3]
切片中获得了多个数组,因此我假设您已将其附加至少 3 次。
如果您想要rec_history第一项的前三项,您需要执行以下操作:
rec_history[0][:3]
如果由于某种原因您不希望在rec_history中使用数组,您可以将附加行更改为:
rec_history.append(list(visrec[0,:]))
如果您打算更改 visrec 并希望查看它在以前状态下的样子,这会很好,因为像您所做的那样仅附加数组切片只会创建对该部分的引用大批。因此,如果您使用代码更改数组,它也会更改 rec_history
中的内容。
关于python - numpy.array 访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10568069/