【发布时间】:2015-01-10 00:14:00
【问题描述】:
我对多维 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]], [[], []], [[], []], [[], []]]]
实现这一目标的正确方法是什么?
【问题讨论】:
-
如果你使用的数组真的那么简单和统一,你应该考虑strong numpy。在这种情况下,您将使用
b = numpy.empty((4,4,2), dtype=int)。即使是创建数组的简单步骤也快了 20--30 倍。如果你对数据做任何有趣的事情,numpy 通常比 MightyPork 的(完全有效的)解决方案快数百或数千倍,而且基本上永远不会慢(据我所见)。
标签: python arrays multidimensional-array