54

答えは非常に明白だと思いますが、現時点ではわかりません。

レコード配列を通常の ndarray に戻すにはどうすればよいですか?

次の単純な構造化配列があるとします。

x = np.array([(1.0, 4.0,), (2.0, -1.0)], dtype=[('f0', '<f8'), ('f1', '<f8')])

次に、次のように変換します。

array([[ 1.,  4.],
       [ 2., -1.]])

asarrayとを試しastypeましたが、うまくいきませんでした。

更新 (解決: float64 (f8) の代わりに float32 (f4))

OK、Robert ( x.view(np.float64).reshape(x.shape + (-1,)) ) の解決策を試してみましたが、単純な配列で完全に機能します。しかし、変換したい配列を使用すると、奇妙な結果が得られます。

data = np.array([ (0.014793682843446732, 0.006681123282760382, 0.0, 0.0, 0.0, 0.0008984912419691682, 0.0, 0.013475529849529266, 0.0, 0.0),
       (0.014793682843446732, 0.006681123282760382, 0.0, 0.0, 0.0, 0.0008984912419691682, 0.0, 0.013475529849529266, 0.0, 0.0),
       (0.014776384457945824, 0.006656022742390633, 0.0, 0.0, 0.0, 0.0008901208057068288, 0.0, 0.013350814580917358, 0.0, 0.0),
       (0.011928378604352474, 0.002819152781739831, 0.0, 0.0, 0.0, 0.0012627150863409042, 0.0, 0.018906937912106514, 0.0, 0.0),
       (0.011928378604352474, 0.002819152781739831, 0.0, 0.0, 0.0, 0.001259754877537489, 0.0, 0.01886274479329586, 0.0, 0.0),
       (0.011969991959631443, 0.0028706740122288465, 0.0, 0.0, 0.0, 0.0007433745195157826, 0.0, 0.011164642870426178, 0.0, 0.0)], 
      dtype=[('a_soil', '<f4'), ('b_soil', '<f4'), ('Ea_V', '<f4'), ('Kcc', '<f4'), ('Koc', '<f4'), ('Lmax', '<f4'), ('malfarquhar', '<f4'), ('MRN', '<f4'), ('TCc', '<f4'), ('Vcmax_3', '<f4')])

その後:

data_array = data.view(np.float).reshape(data.shape + (-1,))

与えます:

In [8]: data_array
Out[8]: 
array([[  2.28080997e-20,   0.00000000e+00,   2.78023241e-27,
          6.24133580e-18,   0.00000000e+00],
       [  2.28080997e-20,   0.00000000e+00,   2.78023241e-27,
          6.24133580e-18,   0.00000000e+00],
       [  2.21114197e-20,   0.00000000e+00,   2.55866881e-27,
          5.79825816e-18,   0.00000000e+00],
       [  2.04776835e-23,   0.00000000e+00,   3.47457730e-26,
          9.32782857e-17,   0.00000000e+00],
       [  2.04776835e-23,   0.00000000e+00,   3.41189244e-26,
          9.20222417e-17,   0.00000000e+00],
       [  2.32706550e-23,   0.00000000e+00,   4.76375305e-28,
          1.24257748e-18,   0.00000000e+00]])

これは、他の数値と別の形状の配列です。私は何を間違えましたか?

4

5 に答える 5

45

最も簡単な方法はおそらく

x.view((float, len(x.dtype.names)))

(通常、 :floatの要素のタイプに置き換える必要があります)。これは、すべての要素が同じタイプであることを前提としています。xx.dtype[0]

このメソッドは、numpy.ndarray(メソッドで必要な2つのステップとは対照的に、1つのステップで通常のバージョンを提供しますview(…).reshape(…)

于 2012-04-16T09:05:07.987 に答える
14
np.array(x.tolist())
array([[ 1.,  4.],
      [ 2., -1.]])

でも、もしかしたらもっと良い方法があるかもしれません...

于 2011-05-10T23:01:01.737 に答える