我有一个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但是,我想这不会帮助我。
答案 0 :(得分:1)
您正在存储原始数组的切片,并且由于您从rec_history[0:3]
切片中获得了多个数组,我认为您已经附加了至少3次。
如果你想要rec_history第一项的前三项,你需要做:
rec_history[0][:3]
如果由于某种原因不希望rec_history中的数组,您可以将追加行更改为:
rec_history.append(list(visrec[0,:]))
如果您计划更改visrec
并希望查看其在先前状态中的外观,这将是一件好事,因为只需添加数组切片,就会创建对该数组部分的引用。因此,如果您使用代码更改数组,它也会更改rec_history
中的内容。