繁体   English   中英

在Python中编辑多维数组

[英]Editing multi-dimensional arrays in Python

我对多维Python“数组”(实际上是列表列表,而不是numpy数组)的行为感到困惑。 假设我有一个4 x 4数组,其条目是1 x 2数组(即4 x 4数组的条目是包含2个列表的列表)。 我可以使用以下命令初始化一个空数组:

b = [[[[], ]*2, ]*4, ]*4

这将创建以下多维空数组:

[[[[], []], [[], []], [[], []], [[], []]],
[[[], []], [[], []], [[], []], [[], []]],
[[[], []], [[], []], [[], []], [[], []]],
[[[], []], [[], []], [[], []], [[], []]]]

现在,我要修改此4 x 4数组的单个条目。 例如,我想使b[0][0]等于[[1],[2]]

[[[[1], [2]], [[], []], [[], []], [[], []]],
[[[], []], [[], []], [[], []], [[], []]],
[[[], []], [[], []], [[], []], [[], []]],
[[[], []], [[], []], [[], []], [[], []]]]

我的期望是以下命令可以完成该任务:

b[0][0] = [[1],[2]]

但是,这导致了以下矩阵b

[[[[1], [2]], [[], []], [[], []], [[], []]],
[[[1], [2]], [[], []], [[], []], [[], []]],
[[[1], [2]], [[], []], [[], []], [[], []]],
[[[1], [2]], [[], []], [[], []], [[], []]]]

实现此目标的正确方法是什么?

问题是,当您这样做时,

b = [[[[], ]*2, ]*4, ]*4

您正在将引用复制到相同的数组,因此新的大型多维数组包含许多对同一数组的引用。

这是iPython的示例:

In [22]: a = [[],]*10

In [23]: a
Out[23]: [[], [], [], [], [], [], [], [], [], []]

In [24]: a[1].append(12)

In [25]: a
Out[25]: [[12], [12], [12], [12], [12], [12], [12], [12], [12], [12]]

为了更好地创建数组,请转到此处

可能需要的解决方案:

m = [[[[] for x in range(2)] for x in range(4)] for x in range(4)]

[[]]*2将创建一个由两个引用组成的数组,这些引用指向同一个空数组。 当您尝试更改其中一个时,另一个参考反映了该更改,因为它指向相同的更改。 在您的情况下,每一行都指向同一数组。 更改第一个数组时,将更改所有四行指向的数组。

随时了解NumPy

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM