1Dに保存されているデータを2Dに変更したいのですが。
から
x|y|a
1|1|a(1,1)
2|1|a(2,1)
3|1|a(3,1)
1|2|a(1,2)
...
の中へ:
x\y|1 |2 |3
1 |a(1,1)|a(1,2)|a(1,3
2 |a(2,1)|a(2,2)|a(2,3)...
3 |a(3,1)|a(3,2)|a(3,3)...
...
私は2つのループでそれをしました:
(rows - array of x,y,a)
for n in range(len(rows)):
for k in range(x_len):
for l in range(y_len):
if ((a[2, n] == x[0, k]) and (a[3, n] == y[0, l])):
c[k, l] = a[0, n]
しかし、それは時間がかかるので、私の質問は、Pythonでそれに対するスマートで迅速な解決策があるかどうかです。
だから私がやりたいことを明確にするために:
私はreturn()関数を知っています、要点はそれが配列aにランダムにあるということです。
それで:
a = np.empty([4, len(rows)]
4つの列(1,2、x、y)と'len(rows)'行を持つデータベースから配列aにデータを読み込みます。
「1」列に興味があります。これは、新しい変更された配列に配置したいものです。
x = np.zeros([1, x_len], float) y = np.zeros([1, y_len], float)
xは、配列aからソートされたcolumn(x)のベクトルですが、長さがx_lenの重複はありません。
(私はそれをSQLクエリで読みました:selectdistinct ...)
yは、長さがy_lenの配列a (重複なし)からのソートされたcolumn(y)のベクトルです。
次に、配列を作成しています。
c = np.zeros([x_len, y_len], float)
配列aからのデータを3つのループで配置します(前の間違いで申し訳ありません):>
for n in range(len(rows)): for k in range(x_len): for l in range(y_len): if ((a[2, n] == x[0, k]) and (a[3, n] == y[0, l])): c[k, l] = a[0, n]
例:
配列a
array([[1, 3, 6, 5, 6], [1, 2, 5, 5, 6], [1, 4, 7, 1, 2], ## x [2, 5, 3, 3, 4]]) ## y
ベクトル:xとy
[[1,2,4,7]] ## x with x_len=4 [[2,3,4,5]] ## y with y_len=4
配列c
array([[1, 5, 0, 0], [0, 0, 0, 0], [0, 0, 0, 3], [0, 6, 0, 0]])
最後の配列cは次のようになります(最初のa [0]が書き込まれます):
x\y 2|3|4|5 ----------- 1 1|5|0|0 2 0|0|0|0 4 0|0|0|3 7 0|6|0|0
配列cへの書き込み方法を間違えなかったと思います。
助けてくれてありがとう。