将numpy数组转换为结构化类型
我尝试使用下面定义的数据类型(type3)创建一个numpy数组 结构类型3的大小等于数组数据文件的大小 执行此操作的方法是什么 我已经测试过了将numpy数组转换为结构化类型,numpy,Numpy,我尝试使用下面定义的数据类型(type3)创建一个numpy数组 结构类型3的大小等于数组数据文件的大小 执行此操作的方法是什么 我已经测试过了 newarray.astype(type3) but it don't work 及 生成的数据类型相当复杂: In [108]: type3 Out[108]: dtype([('data6', [('data4', '
newarray.astype(type3) but it don't work
及
生成的数据类型相当复杂:
In [108]: type3
Out[108]: dtype([('data6', [('data4', 'i1', (6,)), ('data5', 'i1', (2,)), ('datas', [('data1', 'i1', (3,)), ('data2', 'i1'), ('data3', 'i1', (4,))], (2,))], (3,))])
In [120]: A=np.zeros(1, type3)
In [121]: A
Out[121]:
array([([([0, 0, 0, 0, 0, 0], [0, 0], [([0, 0, 0], 0, [0, 0, 0, 0]), ([0, 0, 0], 0, [0, 0, 0, 0])]), ([0, 0, 0, 0, 0, 0], [0, 0], [([0, 0, 0], 0, [0, 0, 0, 0]), ([0, 0, 0], 0, [0, 0, 0, 0])]), ([0, 0, 0, 0, 0, 0], [0, 0], [([0, 0, 0], 0, [0, 0, 0, 0]), ([0, 0, 0], 0, [0, 0, 0, 0])])],)],
dtype=[('data6', [('data4', 'i1', (6,)), ('data5', 'i1', (2,)), ('datas', [('data1', 'i1', (3,)), ('data2', 'i1'), ('data3', 'i1', (4,))], (2,))], (3,))])
设置值的一种方法是提供与记录显示匹配的嵌套列表/元组
In [122]: A['data6']
Out[122]:
array([[([0, 0, 0, 0, 0, 0], [0, 0], [([0, 0, 0], 0, [0, 0, 0, 0]), ([0, 0, 0], 0, [0, 0, 0, 0])]),
([0, 0, 0, 0, 0, 0], [0, 0], [([0, 0, 0], 0, [0, 0, 0, 0]), ([0, 0, 0], 0, [0, 0, 0, 0])]),
([0, 0, 0, 0, 0, 0], [0, 0], [([0, 0, 0], 0, [0, 0, 0, 0]), ([0, 0, 0], 0, [0, 0, 0, 0])])]],
dtype=[('data4', 'i1', (6,)), ('data5', 'i1', (2,)), ('datas', [('data1', 'i1', (3,)), ('data2', 'i1'), ('data3', 'i1', (4,))], (2,))])
In [123]: _.shape
Out[123]: (1, 3)
因此,数组有一个字段“data6”,它本身具有形状(3)。其中,“数据4”是(6,)或(3,6)与“6”的组合
In [124]: A['data6']['data4']
Out[124]:
array([[[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0]]], dtype=int8)
In [125]: _.shape
Out[125]: (1, 3, 6)
In [126]: A['data6'].dtype.names
Out[126]: ('data4', 'data5', 'datas')
In [127]: A['data6']['datas']
Out[127]:
array([[[([0, 0, 0], 0, [0, 0, 0, 0]), ([0, 0, 0], 0, [0, 0, 0, 0])],
[([0, 0, 0], 0, [0, 0, 0, 0]), ([0, 0, 0], 0, [0, 0, 0, 0])],
[([0, 0, 0], 0, [0, 0, 0, 0]), ([0, 0, 0], 0, [0, 0, 0, 0])]]],
dtype=[('data1', 'i1', (3,)), ('data2', 'i1'), ('data3', 'i1', (4,))])
In [128]: A['data6']['datas'].dtype.names
Out[128]: ('data1', 'data2', 'data3')
In [129]: A['data6']['datas']['data1'].shape
Out[129]: (1, 3, 2, 3)
recfunctions
具有将非结构化转换为结构化的函数。让我们看看它是否适用于这种复杂的东西:
In [130]: import numpy.lib.recfunctions as rf
In [132]: rf.structured_to_unstructured(A)
Out[132]:
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0]], dtype=int8)
In [133]: _.shape
Out[133]: (1, 72)
因此,从72个值的数组开始:
In [138]: x = np.vstack([np.arange(24),np.arange(10,34),np.arange(20,44)])
In [139]: rf.unstructured_to_structured(x.ravel(), type3)
Out[139]:
array(([([ 0, 1, 2, 3, 4, 5], [ 6, 7], [([ 8, 9, 10], 11, [12, 13, 14, 15]), ([16, 17, 18], 19, [20, 21, 22, 23])]),
([10, 11, 12, 13, 14, 15], [16, 17], [([18, 19, 20], 21, [22, 23, 24, 25]), ([26, 27, 28], 29, [30, 31, 32, 33])]),
([20, 21, 22, 23, 24, 25], [26, 27], [([28, 29, 30], 31, [32, 33, 34, 35]), ([36, 37, 38], 39, [40, 41, 42, 43])])],),
dtype=[('data6', [('data4', 'i1', (6,)), ('data5', 'i1', (2,)), ('datas', [('data1', 'i1', (3,)), ('data2', 'i1'), ('data3', 'i1', (4,))], (2,))], (3,))])
In [124]: A['data6']['data4']
Out[124]:
array([[[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0]]], dtype=int8)
In [125]: _.shape
Out[125]: (1, 3, 6)
In [126]: A['data6'].dtype.names
Out[126]: ('data4', 'data5', 'datas')
In [127]: A['data6']['datas']
Out[127]:
array([[[([0, 0, 0], 0, [0, 0, 0, 0]), ([0, 0, 0], 0, [0, 0, 0, 0])],
[([0, 0, 0], 0, [0, 0, 0, 0]), ([0, 0, 0], 0, [0, 0, 0, 0])],
[([0, 0, 0], 0, [0, 0, 0, 0]), ([0, 0, 0], 0, [0, 0, 0, 0])]]],
dtype=[('data1', 'i1', (3,)), ('data2', 'i1'), ('data3', 'i1', (4,))])
In [128]: A['data6']['datas'].dtype.names
Out[128]: ('data1', 'data2', 'data3')
In [129]: A['data6']['datas']['data1'].shape
Out[129]: (1, 3, 2, 3)
In [130]: import numpy.lib.recfunctions as rf
In [132]: rf.structured_to_unstructured(A)
Out[132]:
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0]], dtype=int8)
In [133]: _.shape
Out[133]: (1, 72)
In [138]: x = np.vstack([np.arange(24),np.arange(10,34),np.arange(20,44)])
In [139]: rf.unstructured_to_structured(x.ravel(), type3)
Out[139]:
array(([([ 0, 1, 2, 3, 4, 5], [ 6, 7], [([ 8, 9, 10], 11, [12, 13, 14, 15]), ([16, 17, 18], 19, [20, 21, 22, 23])]),
([10, 11, 12, 13, 14, 15], [16, 17], [([18, 19, 20], 21, [22, 23, 24, 25]), ([26, 27, 28], 29, [30, 31, 32, 33])]),
([20, 21, 22, 23, 24, 25], [26, 27], [([28, 29, 30], 31, [32, 33, 34, 35]), ([36, 37, 38], 39, [40, 41, 42, 43])])],),
dtype=[('data6', [('data4', 'i1', (6,)), ('data5', 'i1', (2,)), ('datas', [('data1', 'i1', (3,)), ('data2', 'i1'), ('data3', 'i1', (4,))], (2,))], (3,))])