2017-01-19 19 views
6

MATLABには多次元配列を簡単に定義する方法があります。に格納されている最初の2つの指標は(下の画像を参照するか、ページ)は、i番目の行列の行および列に対して、それぞれ多次元配列をPythonでどのように定義できますか?

A(:,:,1) = [1,2,3; 4,5,6]; 
A(:,:,2) = [7,8,9; 10,11,12]; 

>> A 

A(:,:,1) = 

1  2  3 
4  5  6 


A(:,:,2) = 

7  8  9 
10 11 12 

enter image description here

誰もが、私はpythonで同じ構造を定義することができる方法を知っていますか?

+3

**使用numpyのに似ています。 PythonのMatlabに似ています。 – RemcoGerlich

答えて

8

** MATLAB

import numpy as np 
A=np.empty((2,3,3)) 
A.shape 
#(2L, 3L, 3L) 
A[0,1,2] # element at index 0,1,2 
#0.0 
A[0,:,:] # 3x3 slice at index 0 
#array([[ 0., 0., 0.], 
#  [ 0., 0., 0.], 
#  [ 0., 0., 0.]]) 
A[1,1,:] # 1-D array of length 3 
#array([ 0., 0., 0.] 
+3

おそらく、 'np'を使っているので' import'ステートメントを表示し、あなたの答えを「もっと缶詰め」にするべきでしょう。 +1。 –

+2

MATLABでは、数値演算を行うときにPythonが 'A [z、y、x]'に従うのに対し、MATLABでは一般に 'A(x、y、z)'をインデックスします。 –

+0

はい、かっこと角カッコの違いが、 'matlab'は' python'の0ベースのインデックスの代わりに 'R'のような1ベースのインデックスを使います。 –

8

純粋なPythonこれを行う方法は、リストのリスト(またはリストのリストのリスト)を使用しています。リストの理解で初期化することができます。例えば:

w = 4 #width 
h = 3 #height 
d = 3 #depth 

data = [[[0]*h for _ in range(w)] for _ in range(d)] 

それとも、数字上のようなタプルでテンソルを埋めるためにしたい場合:

data = [[[(i+1,j+1,k+1) for k in range(h)] for j in range(w)] for i in range(d)] 

これはゼロで埋めd X w X h "マトリックス" を初期化します。あなたはに喜んでいる場合

data[i][j][k] 

はいえベクトル、行列、テンソルをサポートしていのようなライブラリがある、など

+0

あなたの答えをありがとう!次に、私はしようとしているのは配列のリストだと思います。 A = [array [[1,2,3]、[4,5,6]])、array([[5、 6,7]、[7,8,9]])] しかし、Aの最初の配列の各行の最初の要素だけを呼び出す方法はありますか? MATLABの中にはA(:、1,1)となるものがあります。ありがとう! – S88S

+0

@ S88S:私の知る限りではありません。その場合はnumpyを使うのが良い:numpyは行列演算を行うためのもので、計算はPython自体はもちろん汎用プログラミング言語である。 –

2

:あなたは、その後で(i,j,k)番目の要素にアクセスすることができます

NumPyを使用してください。plenty of waysがあります。 1つの方法は、すべてゼロで初期化することです。または、更新された例のように、範囲を入力してからreshapeを入力することもできます。 numpyのインデックス作成と

import numpy as np 

a = np.arange(48, dtype=np.int64).reshape((3, 4, 4)) 
# or 
b = np.zeros((3, 4, 4), dtype=np.int64) 
関連する問題