numpy.array访问

时间:2012-05-12 23:05:29

标签: python numpy

我有一个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但是,我想这不会帮助我。

1 个答案:

答案 0 :(得分:1)

您正在存储原始数组的切片,并且由于您从rec_history[0:3]切片中获得了多个数组,我认为您已经附加了至少3次。

如果你想要rec_history第一项的前三项,你需要做:

rec_history[0][:3]

如果由于某种原因不希望rec_history中的数组,您可以将追加行更改为:

rec_history.append(list(visrec[0,:]))

如果您计划更改visrec并希望查看其在先前状态中的外观,这将是一件好事,因为只需添加数组切片,就会创建对该数组部分的引用。因此,如果您使用代码更改数组,它也会更改rec_history中的内容。