我有一个类似以下的结构:
product_type = np.dtype([('message_counter', np.int),
('alteration_time', 'U32'),
('area_states', status_type, (3,)),
])
具有:
status_type = np.dtype([('area', 'U32'),
('state', 'U32')])
此外,我有一个product_type
数组,例如:
products = np.array([product1, product2, ...], dtype=product_type)
现在,我要选择仅具有status_type
等于('area1', 'active')
的产品。我将如何实现这一目标。我尝试过类似的事情:
mask = np.isin(products['area_states'][['area', 'state']],
('area1', 'active'))
active_products = products[mask]
不幸的是,这并没有达到我希望的方式。当然,我只收到了用于子数组(status_type
)的遮罩,但是我希望对产品使用遮罩,以便可以用status_type
过滤仅具有('area1', 'active')
的产品。
因此所有代码如下:
status_type = np.dtype([('area', 'U32'),
('state', 'U32')])
product_type = np.dtype([('message_counter', np.int),
('alteration_time', 'U32'),
('area_states', status_type, (3,)),
])
products = np.array([(253, '12:00', [('area1', 'active'), ('area2', 'inactive'), ('area3', 'inactive')]),
(254, '13:00', [('area1', 'inactive'), ('area2', 'inactive'), ('area3', 'inactive')])],
dtype=product_type)
active_products_in_area1 = '???'
答案 0 :(得分:1)
您可以使用
创建目标状态变量status = np.array(('area1', 'active'), dtype=status_type)
并使用np.any
获取有效产品掩码(沿{1}列表沿轴1的循环减小)
status_type
仅产生示例数组中的第一条记录:
mask = (products['area_states'] == status).any(axis=1)
active_products_in_area1 = products[mask]