4

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

ベクトル:xy

 [[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への書き込み方法を間違えなかったと思います。

助けてくれてありがとう。

4

1 に答える 1

6

numpyを使用できます。

>>> import numpy as np
>>> a = np.arange(9)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8])
>>> a.reshape(3,3)
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
#or:
>>> a.reshape(3,3).transpose()
array([[0, 3, 6],
       [1, 4, 7],
       [2, 5, 8]])
于 2012-06-18T20:04:24.603 に答える