2
  1. (行、列、値)トリプルの配列をNumpyの行列に変換する最も簡単な方法は何ですか?
  2. 任意の数のインデックスがある場合はどうですか?
  3. また、マトリックスを (行、列、値) トリプレットに戻す最も簡単な方法は何ですか?

以下は 3 に対して機能しますが、非常に遠回しに感じます

In [1]: M = np.arange(9).reshape((3,3))

In [2]: M
Out[2]: 
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

In [3]: (rows, cols) = np.where(M)

In [4]: vals = M[rows, cols]

In [5]: zip(rows, cols, vals)
Out[5]: 
[(0, 1, 1),
 (0, 2, 2),
 (1, 0, 3),
 (1, 1, 4),
 (1, 2, 5),
 (2, 0, 6),
 (2, 1, 7),
 (2, 2, 8)]

そして、以下は 1 に対して機能しますが、scipy.sparse が必要です

In [6]: import scipy.sparse as sp

In [7]: sp.coo_matrix((vals, (rows, cols))).todense()
Out[7]: 
matrix([[0, 1, 2],
        [3, 4, 5],
        [6, 7, 8]])
4

1 に答える 1

2

ちょうどこのような:

a=empty([max(rows)+1, max(cols)+1])
a[rows,cols] = vals
array([[  3.71697611e-307,   1.00000000e+000,   2.00000000e+000],
    [  3.00000000e+000,   4.00000000e+000,   5.00000000e+000],
    [  6.00000000e+000,   7.00000000e+000,   8.00000000e+000]])

リストに (0,0) の値がないため、奇妙な値であることに注意してください。任意の数の値に対して機能する必要があります。インデックスを取得します。

unravel_index(range(9), a.shape)
(array([0, 0, 0, 1, 1, 1, 2, 2, 2]), array([0, 1, 2, 0, 1, 2, 0, 1, 2]))
于 2012-12-06T16:31:43.410 に答える