python生成多维矩阵

错误的生成方法

先展示一个错误的方法:

a = [[['unknown', 0.0, 0]] * 2] * 6

生成:

[[[‘unknown’, 0.0, 0], [‘unknown’, 0.0, 0]],
[[‘unknown’, 0.0, 0], [‘unknown’, 0.0, 0]],
[[‘unknown’, 0.0, 0], [‘unknown’, 0.0, 0]],
[[‘unknown’, 0.0, 0], [‘unknown’, 0.0, 0]],
[[‘unknown’, 0.0, 0], [‘unknown’, 0.0, 0]],
[[‘unknown’, 0.0, 0], [‘unknown’, 0.0, 0]]]

当我们修改其中一项时:

a[0][0] = 5

生成:

[[5, [‘unknown’, 0.0, 0]],
[5, [‘unknown’, 0.0, 0]],
[5, [‘unknown’, 0.0, 0]],
[5, [‘unknown’, 0.0, 0]],
[5, [‘unknown’, 0.0, 0]],
[5, [‘unknown’, 0.0, 0]]]

可以看到,a[n][0]全部都被改变了

这种方法只适用于一维数组:

a[0] = [8, 8, 8]

生成:

[[8, 8, 8],
[5, [‘unknown’, 0.0, 0]],
[5, [‘unknown’, 0.0, 0]],
[5, [‘unknown’, 0.0, 0]],
[5, [‘unknown’, 0.0, 0]],
[5, [‘unknown’, 0.0, 0]]]

可以看到修改最高维项时,没有改变其他数值

正确的生成方法

此方法也可以结合Pandas生成DateFrame

d = [[['unknown', 0.0, 0] for _ in range(2)] for _ in range(2)]

生成:

[[[‘unknown’, 0.0, 0], [‘unknown’, 0.0, 0]],
[[‘unknown’, 0.0, 0], [‘unknown’, 0.0, 0]]]

修改:

d[0][0][0] = 'known'

生成:

[[[‘known’, 0.0, 0], [‘unknown’, 0.0, 0]],
[[‘unknown’, 0.0, 0], [‘unknown’, 0.0, 0]]]

可以看到没有修改其他项

当数据类型相同时,可以使用numpy

b = np.zeros((2, 2, 2))
print(b)

生成:

[[[0. 0.]
[0. 0.]]

[[0. 0.]
[0. 0.]]]

修改:

b[0][0][0] = 6

生成:

[[[6. 0.]
[0. 0.]]

[[0. 0.]
[0. 0.]]]

可以看到也没有修改其他项