Laí*_*llo 36 python arrays multidimensional-array python-2.7
我想在Python(2.7)中创建一个3D数组,使用如下:
distance[i][j][k]
Run Code Online (Sandbox Code Playgroud)
并且数组的大小应该是我拥有的变量的大小.(N*N*N)
我试过用:
distance = [[[]*n]*n]
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用.
有任何想法吗?非常感谢!
编辑:我只能使用deafult库,乘法的方法(即[[0]*n]*n)不会工作,因为它们链接到同一个指针,我需要所有的值都是个体的
EDIT2:已经通过以下答案解决了.
rob*_*ert 61
你应该使用列表理解:
>>> import pprint
>>> n = 3
>>> distance = [[[0 for k in xrange(n)] for j in xrange(n)] for i in xrange(n)]
>>> pprint.pprint(distance)
[[[0, 0, 0], [0, 0, 0], [0, 0, 0]],
[[0, 0, 0], [0, 0, 0], [0, 0, 0]],
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]]
>>> distance[0][1]
[0, 0, 0]
>>> distance[0][1][2]
0
Run Code Online (Sandbox Code Playgroud)
您可能已经生成了一个数据结构,其中的语句看起来与您尝试过的语句类似,但由于内部列表是按引用复制的,因此会产生副作用:
>>> distance=[[[0]*n]*n]*n
>>> pprint.pprint(distance)
[[[0, 0, 0], [0, 0, 0], [0, 0, 0]],
[[0, 0, 0], [0, 0, 0], [0, 0, 0]],
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]]
>>> distance[0][0][0] = 1
>>> pprint.pprint(distance)
[[[1, 0, 0], [1, 0, 0], [1, 0, 0]],
[[1, 0, 0], [1, 0, 0], [1, 0, 0]],
[[1, 0, 0], [1, 0, 0], [1, 0, 0]]]
Run Code Online (Sandbox Code Playgroud)
mat*_*ata 30
numpy.arrays仅针对此案例设计:
numpy.zeros((i,j,k))
Run Code Online (Sandbox Code Playgroud)
会给你一个尺寸为i j k 的数组,用零填充.
根据您的需要,numpy可能是适合您需求的库.
正确的方法是
[[[0 for _ in range(n)] for _ in range(n)] for _ in range(n)]
Run Code Online (Sandbox Code Playgroud)
(你要做的就是写(对于NxNxN)
[[[0]*n]*n]*n
Run Code Online (Sandbox Code Playgroud)
但这不正确,请参阅@Adaman评论为什么).
d3 = [[[0 for col in range(4)]for row in range(4)] for x in range(6)]
d3[1][2][1] = 144
d3[4][3][0] = 3.12
for x in range(len(d3)):
print d3[x]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 144, 0, 0], [0, 0, 0, 0]]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [3.12, 0, 0, 0]]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
Run Code Online (Sandbox Code Playgroud)
"""
Create 3D array for given dimensions - (x, y, z)
@author: Naimish Agarwal
"""
def three_d_array(value, *dim):
"""
Create 3D-array
:param dim: a tuple of dimensions - (x, y, z)
:param value: value with which 3D-array is to be filled
:return: 3D-array
"""
return [[[value for _ in xrange(dim[2])] for _ in xrange(dim[1])] for _ in xrange(dim[0])]
if __name__ == "__main__":
array = three_d_array(False, *(2, 3, 1))
x = len(array)
y = len(array[0])
z = len(array[0][0])
print x, y, z
array[0][0][0] = True
array[1][1][0] = True
print array
Run Code Online (Sandbox Code Playgroud)
更喜欢用于numpy.ndarray多维数组。
| 归档时间: |
|
| 查看次数: |
167474 次 |
| 最近记录: |