12

データを 3 次元配列、つまりx[0][0][0]Python に格納しようとしています。を初期化xし、それに値を追加する方法は? 私はこれを試しました:

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

両方の行が範囲外エラーを出しています。どうやってするの?x[0][0][0]=value1、、などのようにしたい。Pythonでこれを達成するにはどうすればよいですかx[1][0][0]=value2?x[0][1][0]=value3

私はこの種の配列を生成しようとしています:

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

4

7 に答える 7

27

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]]]

于 2013-03-16T11:24:45.183 に答える
7

3D スパース配列を作成している場合は、すべてのデータを dict に保存できます。

x={}
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
于 2013-03-16T12:37:19.417 に答える
3

numpy を使用できる場合は、固定サイズの配列を次のように初期化できます。

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

ここで、i、j、k は必要な次元です。

次に、スライス表記を使用してその配列にインデックスを付けることができます。

x[0, 0, 0] = value1
x[1, 0, 0] = value2
于 2013-03-16T11:22:51.663 に答える
2
>>> x=[[[[]]]]
>>> x[0][0][0]=0
>>> x
[[[0]]]
>>> x[0][0].append(1)
>>> x
[[[0, 1]]]
于 2013-03-16T11:27:36.390 に答える
1

2 次元のdictを効果的に作成するための上記の手法をまとめると、次のようになります。

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]

プロデュース:

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

次元の数を増やすには (たとえば、3 次元に)、HYRY が示すようにラムダの "ネスト" を増やすだけです。

x = defaultdict(lambda :defaultdict(lambda :defaultdict(int)))
于 2016-12-16T10:18:52.643 に答える