在 numpy 记录数组中,如何根据记录中的值对元素进行排序?
In a numpy record array, how can you order the elements based off a value in the record?
我有以下 numpy 记录数组。
name module offset
filter-2 filter_module 0x000020
filter-3 filter_module 0x000042
filter-1 filter_module 0x000014
我希望能够检测到哪个偏移值最小,并将它们按升序排列。理想的输出是。
name module offset
filter-1 filter_module 0x000014
filter-2 filter_module 0x000020
filter-3 filter_module 0x000042
这是我生成这个 numpy 数组的代码
instance_dtype={
'names' : ('name','module','offset'),
'formats' : ('U20','U20','U20')}
instance= np.zeros(5,instance_dtype)
i=0
for node in xml_file.iter():
if node.tag=="instance":
attribute=node.attrib.get('name')
inst= (node.attrib.get('name'),node.attrib.get('module'),node.attrib.get('offset'))
instance[i]=inst
i=i+1
print('%10s,%15s,%5s'%tuple(rec))
如何读取偏移值找出最小值,然后重新组织数组以从最小偏移值开始到最大偏移值?
任何 'columns' 都可以通过名称访问:
inst['name']
inst['module']
np.sort
接受一个 order
参数 - 请参阅其文档以获取示例
无需重新创建数组,我认为这应该可行:
inst1 = np.sort(inst, order='offset')
inst1
应打印 'rows' 按 'offset' 排序。
您也可以在特定字段上尝试 argsort
:
idx = np.argsort(inst['offset'])
inst[idx]
我有以下 numpy 记录数组。
name module offset
filter-2 filter_module 0x000020
filter-3 filter_module 0x000042
filter-1 filter_module 0x000014
我希望能够检测到哪个偏移值最小,并将它们按升序排列。理想的输出是。
name module offset
filter-1 filter_module 0x000014
filter-2 filter_module 0x000020
filter-3 filter_module 0x000042
这是我生成这个 numpy 数组的代码
instance_dtype={
'names' : ('name','module','offset'),
'formats' : ('U20','U20','U20')}
instance= np.zeros(5,instance_dtype)
i=0
for node in xml_file.iter():
if node.tag=="instance":
attribute=node.attrib.get('name')
inst= (node.attrib.get('name'),node.attrib.get('module'),node.attrib.get('offset'))
instance[i]=inst
i=i+1
print('%10s,%15s,%5s'%tuple(rec))
如何读取偏移值找出最小值,然后重新组织数组以从最小偏移值开始到最大偏移值?
任何 'columns' 都可以通过名称访问:
inst['name']
inst['module']
np.sort
接受一个 order
参数 - 请参阅其文档以获取示例
无需重新创建数组,我认为这应该可行:
inst1 = np.sort(inst, order='offset')
inst1
应打印 'rows' 按 'offset' 排序。
您也可以在特定字段上尝试 argsort
:
idx = np.argsort(inst['offset'])
inst[idx]