python - numpy.array 访问

标签 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,但是我想它对我没有帮助。

最佳答案

您正在存储原始数组的切片,并且由于您从 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/

相关文章:

python - plotly :如何在将鼠标悬停在三个y布局和一个x轴共享图上时显示所有堆叠的y轴数据值?

python - 为什么在这个 numpy 数组中 ndim = 2 ?

python - 二维数组 : row-wise operations

python - 两个形状相同的复杂多维数组的条件检查

python - 多次嵌套 'for'循环,如果内层循环条件为真,继续下一次外层循环

python - 有效地将列表转换为数据框

python - Pandas 函数太慢 - 使用 dict/numpy 优化?

python - 如何使用 SQLAlchemy contextmanager 并仍然获得行 ID?

python - 平方数Python时出现奇怪的错误

python - 合并数组的重复行