2017-11-09 19 views
0

私はしばらくの間この問題に苦しんでおり、解決策を見つけることはできません。私はヒートマップをプロットしようとし、いくつかを読んでstuffしかし、問題は異なっています。 私は3つのベクトルがありますベクトルから1つの配列を取得する - python

x = [ -1, 0, 1, -1, 0, 1, 0, -1, 1 ] 
    y = [ -1, -1, -1, 0, 0, 0, 1, 1, 1 ] 
    E = [ 3, 1, 4, 1, 5, 9, 6, 2, 5 ] 

を何私がしたいことは、実際の描画のための以下のような行列である:

E_xy = [ [ 3, 1, 4], 
     [ 1, 5, 9], 
     [ 2, 6, 5]] 

X [0] yに属する[0] Eに属している[0 ] 等々。

これを行う最も簡単な方法は何ですか?

注意:行列の順序付けは使用できません(E [7]とE [8]と結果のE_xy [2,0]とE_xy [2,1]を参照)。

+0

あなたは何を意味するのかよく分かりません。言い換えを考えることは可能でしょうか?すべてのように見えるのは、長さ9の配列を長さ3の3つの配列に分割して順序を保持することです。 eが正しくない場合の正しい順序付けを決める* * * E_xy = [E * [i:i + 3] [x * len(E)/ 3の範囲(3)の]] ' – Will

+2

順序付けられました? –

答えて

0

import numpy as np 

x = np.array([ -1, 0, 1, -1, 0, 1, 0, -1, 1 ]) 
y = np.array([ -1, -1, -1, 0, 0, 0, 1, 1, 1 ]) 
E = np.array([ 3, 1, 4, 1, 5, 9, 6, 2, 5 ]) 
N = int(np.sqrt(E.size)) 

sorting = np.argsort(x + y*N) 
E_xy = E[sorting].reshape(N,N) 
+0

これはxとyからのオフセットを考慮に入れませんか? – jbndlr

+0

"オフセット"とはどういう意味ですか?これは、下位(列)インデックスとして 'x'の値を使用し、上位(行)インデックスとして' y'の値を使用します。 –

+0

'argsort'を追加することで、あなたの編集で修正しました - 前に、あなたは' x、y'インデックスを払っていませんでした。 – jbndlr

0

が行列」中央要素との関係で位置ずれの定義としてごxyリストの解釈の正方形のN×N行列を仮定すると、あなたが最初に自分のポジションを含むタプルを作成してからにすべてを埋めることができます所望の寸法の新たに作成されたマトリックス:

x = [ -1, 0, 1, -1, 0, 1, 0, -1, 1 ] 
y = [ -1, -1, -1, 0, 0, 0, 1, 1, 1 ] 
E = [ 3, 1, 4, 1, 5, 9, 6, 2, 5 ] 

positions = [ 
    (x[i] + 1, y[i] + 1, E[i]) 
    for i in range(len(x)) 
] 

result = [ 
    [None] * 3 for _ in range(3) 
] 
for x, y, value in positions: 
    result[y][x] = value 

print(result) 

これは一般的な解決策ではありません。行列は常に3x3とみなされます。任意の形状の行列に対する一般的なアプローチにするために変更が必要です。

上記コード印刷:

>>> [[3, 1, 4], [1, 5, 9], [2, 6, 5]] 

また、上記のコードは確かに、より効率的に記述することができ、その後可読性に失うことになります。したがって、必要に応じて(行列が大きくなっている場合)必要に応じてメモリを節約するのはあなた次第です。

関連する問題