1

我有一个 2D numpy 数组visrec。如果我做

print visrec[0,:]

我得到这个输出:

[  a1   a2   a3   a4  a5   a6]

a1, a2,..在哪里dtype=float64

更清楚的是,对象visrec中存储的是一个 1x6 矩阵。numpy.array它最初是使用以下命令创建的:

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,但我想这对我没有帮助。

4

1 回答 1

1

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

如果您想要 rec_history 第一项的前三项,您需要执行以下操作:

rec_history[0][:3]

如果您出于某种原因不希望使用 rec_history 中的数组,您可以将附加行​​更改为:

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

如果您打算更改visrec并想看看它在以前的状态下的样子,这将是一件好事,因为只是像您所做的那样附加数组切片只会创建对数组该部分的引用。因此,如果您使用代码更改数组,它也会更改内容rec_history

于 2012-05-13T00:06:13.533 回答