2017-01-11 15 views
0

float32型の強度値(Voxel Intensities)を含む次元(737,737,90)の3D数値配列があります。私のクエリはどのようにしてA = [x-co_ordinate、y-co_ordinate、z-co_ordinate、I(x、y、z)]のような配列を作ることができますか?ここで、I(x、y、z)値は、上述のような配列(737,737,90)であることが知られている。Pythonの3D numpy配列から4列の配列を作成

私は "for"ループメソッドを試しましたが、[x、y、z、I(x、y、z)]のような配列を取得できませんでした。 Python 3.5でこれを解決する方法があれば教えてください。

私が試した方法THTは

ARR =形状(737,737,90)の値で構成さの配列です。 arr.shapeにおけるxの

[0]:

for y in arr.shape[1]: 

    for z in arr.shape[2]: 

     A[] = [x,y,z, (arr[x,y,z])] 

ここARR [X、Y、Z]は寸法のフロート値(737,737,90)の配列です。

私はA [x、y、z、arr_value]のような配列が必要です。あなたのアプローチは悪くなかった、python3.5

よろしくで

ラジ

+0

こんにちは!あなたの問題を解決する多くのソリューションが可能です。あなたは "for looping method"の意味を明確にしていただけますか?最低限の自己完結型の例でコードを投稿するのがベストです。それから、誰かが何が間違っているのか、それを正しく行う方法を教えてくれると確信しています。 :) – kazemakase

+0

お返事ありがとうございます。私はクエリを編集しました。 –

答えて

0

一つのアプローチは、np.indicesでこれらすべてのインデックスを取得し、入力配列とそれを積み重ねることであろう。出力は(4, X, Y, Z)形式になります。最後に、4の列フォーマットにするには、軸をロールして最初の軸を押し戻します。

したがって、実装は次のようになります -

I = np.indices(arr.shape) 
out = np.rollaxis(np.vstack((I,arr[None])),0,4) 
+0

あなたの答えをありがとう。しかし、私はそれを得ることができませんでした。出力をチェックすると、[200,200,30]のようなランダムなインデックスにアクセスしたことを確認すれば、そのx、y、zインデックスに対応する単一の値が得られるはずです。 4つの値を示します。どうして?あなたが私に知らせてくれれば助けになるでしょう。 –

+0

@rajubhaiあなたが4D配列と仮定した 'A:[x、y、z、arr_value]'のような質問にあなたが挙げたのはあなたです。したがって、out [200,200,30](out [200,200,30、:]と同じ)で最初の3つの軸にインデックスを付けると、4つの列に対応する4つの要素がすべて取得されます。あなたはなぜ[200、200、30]を単一の値にすると思いますか?もしあなたが単一の値を期待していたら、 'arr [200,200,30]'で入力配列そのものからその単一の値を取得しようとしているのでしょうか? – Divakar

+0

OK。ありがとうございました。今私はそれに行きました。 –

0

これを行うにはどんな方法があります。これらは問題です:

  • あなたはあなたがループ
で使用する前に Aを初期化する必要があり range
  • を使用する必要がある値の範囲にわたってループ処理をX
  • にわたってループ処理を忘れてしまいました

    A = [] 
    for x in range(arr.shape[0]): 
        for y in range(arr.shape[1]): 
         for z in range(arr.shape[2]): 
          A.append([x,y,z, arr[x,y,z]]) 
    A = np.array(A) # convert to array 
    

    これは良いスタートですが、ネストされたforループはPythonではしばしば遅いため、非常に非効率的な解決策です。潜在的に高速ですが、読みにくくソリューションは、次のようになります。

    n_voxels = np.prod(arr.shape) 
    A = np.vstack([np.unravel_index(np.arange(n_voxels), arr.shape), arr.ravel()]).T 
    
  • 関連する問題