将结构化数组转换为常规的NumPy数组

我想,答案会非常明显,但目前看不出来。

我怎样才能将logging数组转换回常规的ndarray?

假设我有以下简单的结构化数组:

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

那么我想将其转换为:

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

我尝试asarrayastype ,但没有奏效。

更新(解决:float32(f4),而不是float64(f8))

好的,我尝试了解决scheme的罗伯特( 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]]) 

这是一个数组与其他数字和另一个形状。 我做错了什么?

 [~] |5> x = np.array([(1.0, 4.0,), (2.0, -1.0)], dtype=[('f0', '<f8'), ('f1', '<f8')]) [~] |6> x.view(np.float64).reshape(x.shape + (-1,)) array([[ 1., 4.], [ 2., -1.]]) 

最简单的方法可能是

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

float必须一般由xx.dtype[0]元素的typesreplace)。 这假定所有元素都具有相同的types。

这个方法在一个步骤中为您提供了常规的numpy.ndarray版本(而不是view(…).reshape(…)方法所需的两个步骤。

 np.array(x.tolist()) array([[ 1., 4.], [ 2., -1.]]) 

但也许有更好的方法…