如何在Python中向3维数组添加元素

12 人关注

我试图用Python将数据存储在三维数组中,即 x[0][0][0] 。如何初始化 x ,并向其添加数值?我试着这样做了。

x[0][0][0]=value1 x[0][0].append(value1)

两条线都出现了超出范围的错误。如何做到这一点?我希望它像这样。 x[0][0][0]=value1 , x[1][0][0]=value2 , x[0][1][0]=value3 等。如何在Python中实现这一点?

我正在寻找生成这种阵列的方法。

x=[[[11,[111],[112]],[12],[13]],[[21,[211],[212]],[22],[23],[24]],[[31],[32]]]
x[0][0][0] will give 11
x[1][0][0]  21
x[0][0][1] 111
    
5 个评论
先把 x 做成三维的。
wRAR
它不是一个三维数组,它是一个列表的列表的列表。如果你想用它工作,你需要手动完成所有工作。
@Volatility 如何做到这一点?
@wRAR手动的意义?
wRAR
@lokesh 创建了所有的中级名单
python
arrays
multidimensional-array
lokesh
lokesh
发布于 2013-03-16
7 个回答
amaurea
amaurea
发布于 2017-10-07
已采纳
0 人赞同

I recommend using numpy 为多维数组。这使得它更方便,也更快。这看起来就像。

import numpy as np
x = np.zeros((10,20,30)) # Make a 10 by 20 by 30 array
x[0,0,0] = value1

尽管如此,如果你不想使用numpy,或者需要非矩形的多维数组,你将需要把它当作一个列表的列表,并初始化每个列表。

x = []
x.append([])
x[0].append([])
x[0][0].append(value1)

编辑:或者你可以使用ndpu的答案中显示的紧凑符号(x = [[[value1]]])。

buses[0]=[] IndexError: list assignment index out of range. I am not interested to use numpy. With out numpy how to do?
wRAR
@lokesh 你不能给不存在的项目赋值。请阅读如何在 Python 中处理列表。
@lokesh。我最初的回答有点太快了。我现在已经编辑好了。顺便问一下,你为什么不愿意使用numpy?
我可以使用这个方法。但我如何才能将其初始化为固定的数组,我的意思是我一开始不知道我的数组大小。
在这样的情况下,我通常会把所有的元素追加到一个一维的平面列表中,然后,当我读完后,把它转换成一个numpy数组,并把它重塑为正确的三维形状。也就是类似于 a = np.array([float(word) for line in file for word in line]); a = np.reshape(a, (a.size/10,10)) 的东西。当然,首先建立完整的多维列表,然后将其转换为数组,这并没有错。
HYRY
HYRY
发布于 2017-10-07
0 人赞同

如果你正在创建一些三维稀疏数组,你可以将所有数据保存在一个dict中。

x[0,0,0] = 11 x[1,0,0] = 21 x[0,1,1] = 111
from collections import defaultdict
x = defaultdict(lambda :defaultdict(lambda :defaultdict(int)))
x[0][0][0] = 11
x[1][0][0] = 21
x[0][0][1] = 111
    
我想要一些可改变的东西,x={}我不能把项目设置为它。
HYRY
什么是 "x={}我不能将项目设置为它 "的意思?
在你的建议中,我想删除x[0,0,0]。我怎样才能在x创建后删除。
在你的例子中,len(x)是3。我怎样才能根据这个索引访问每一个。例如x(1)应该分别给出11。
Andrew Walker
Andrew Walker
发布于 2017-10-07
0 人赞同

如果你能使用numpy,你可以将一个固定大小的数组初始化为。

import numpy
x = numpy.zeros((i, j, k))

其中i、j和k是所需的尺寸。

然后你可以使用切片符号对该数组进行索引。

x[0, 0, 0] = value1
x[1, 0, 0] = value2
    
我的数组大小不固定,我可以初始化变量大小吗?
Wayne Workman
Wayne Workman
发布于 2017-10-07
0 人赞同

我只是想出了这个办法,它更有活力,更简单。

# Define how large to make the object.
size = 3
# Build the three dimensional list.
memory = []
for x in range(0,size):
    memory.append([])
    for y in range(0,size):
        memory[x].append([])
        for z in range(0,size):
           memory[x][y].append(0) # Fill with zeros.
# Iterate through all values.
for x in range(0,size):
    for y in range(0,size):
        for z in range(0,size):
            print 'memory[' + str(x) + '][' + str(y) + '][' + str(z) + ']=' + str(memory[x][y][z])
# Example access.
print 'Example access:'
print 'memory[0][1][2]=' + str(memory[0][1][2])

Output:

memory[0][0][0]=0
memory[0][0][1]=0
memory[0][0][2]=0
memory[0][1][0]=0
memory[0][1][1]=0
memory[0][1][2]=0
memory[0][2][0]=0
memory[0][2][1]=0
memory[0][2][2]=0
memory[1][0][0]=0
memory[1][0][1]=0
memory[1][0][2]=0
memory[1][1][0]=0
memory[1][1][1]=0
memory[1][1][2]=0
memory[1][2][0]=0
memory[1][2][1]=0
memory[1][2][2]=0
memory[2][0][0]=0
memory[2][0][1]=0
memory[2][0][2]=0
memory[2][1][0]=0
memory[2][1][1]=0
memory[2][1][2]=0
memory[2][2][0]=0
memory[2][2][1]=0
memory[2][2][2]=0
Example access:
memory[0][1][2]=0
    
ndpu
ndpu
发布于 2017-10-07
0 人赞同
>>> x=[[[[]]]]
>>> x[0][0][0]=0
[[[0]]]
>>> x[0][0].append(1)
[[[0, 1]]]
    
user2099484
user2099484
发布于 2017-10-07
0 人赞同

上述关于有效创建二维码的技术汇编 dict is:

from collections import defaultdict
x = defaultdict(lambda :defaultdict())
x["a"]["b"] = 123
x["a"]["c"] = 234
x["b"]["a"] = 234    
x["b"]["c"] = 234    
x["c"]["a"] = 234
x["c"]["b"] = 234
for i in x: 
    for j in x[i]: print i, j, x[i][j]

Produces:

a c 234
a b 123
c a 234
c b 234
b a 234
b c 234

要增加维数(如增加到三维),只需如HYRY所示增加λ的 "巢"。

x = defaultdict(lambda :defaultdict(lambda :defaultdict(int)))
    
Peter Hausdorff Smith K.
Peter Hausdorff Smith K.
发布于 2017-10-07
0 人赞同

Interator.在Python 3中,我使用函数lambda来创建带有[ [ 0 for j in range(n)] for i in range(m)] 的矩阵。在版本2中,我使用了map函数。 此刻,我想使用数组模块(纯python)来创建矩阵。