在元组的numpy数组中的给定位置查找唯一值

2024-04-23 20:45:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个numpy数组,看起来像这样:

[
('{893EE51E-0CD1-4C06-B672-365EECA26C33}', 'image/jpeg', 'Photo1.jpg', []),
('{893EE51E-0CD1-4C06-B672-365EECA26C33}', 'image/jpeg', 'Photo2.jpg', []),
('{893EE51E-0CD1-4C06-B672-365EECA26C63}', 'image/jpeg', 'Photo1.jpg', []),
('{893EE51E-0CD1-4C06-B672-365EECA26C73}', 'image/jpeg', 'Photo1.jpg', [])
]

如何在每个元组的“位置0”处找到唯一值?理想情况下,我希望输出如下所示的数组(或列表):

[
'{893EE51E-0CD1-4C06-B672-365EECA26C33}',
'{893EE51E-0CD1-4C06-B672-365EECA26C63}',
'{893EE51E-0CD1-4C06-B672-365EECA26C73}'
]

Tags: imagenumpy列表情况数组jpegjpg元组
3条回答

从显示器重新创建结构化阵列:

In [241]: _ = np.array([
     ...: ('{893EE51E-0CD1-4C06-B672-365EECA26C33}', 'image/jpeg', 'Photo1.jpg', []),
     ...: ('{893EE51E-0CD1-4C06-B672-365EECA26C33}', 'image/jpeg', 'Photo2.jpg', []),
     ...: ('{893EE51E-0CD1-4C06-B672-365EECA26C63}', 'image/jpeg', 'Photo1.jpg', []),
     ...: ('{893EE51E-0CD1-4C06-B672-365EECA26C73}', 'image/jpeg', 'Photo1.jpg', [])
     ...: ],dtype='U50,U20,U20,O')
Out[241]: 
array([('{893EE51E-0CD1-4C06-B672-365EECA26C33}', 'image/jpeg', 'Photo1.jpg', list([])),
       ('{893EE51E-0CD1-4C06-B672-365EECA26C33}', 'image/jpeg', 'Photo2.jpg', list([])),
       ('{893EE51E-0CD1-4C06-B672-365EECA26C63}', 'image/jpeg', 'Photo1.jpg', list([])),
       ('{893EE51E-0CD1-4C06-B672-365EECA26C73}', 'image/jpeg', 'Photo1.jpg', list([]))],
      dtype=[('f0', '<U50'), ('f1', '<U20'), ('f2', '<U20'), ('f3', 'O')])

选择第一个字段:

In [242]: _['f0']
Out[242]: 
array(['{893EE51E-0CD1-4C06-B672-365EECA26C33}',
       '{893EE51E-0CD1-4C06-B672-365EECA26C33}',
       '{893EE51E-0CD1-4C06-B672-365EECA26C63}',
       '{893EE51E-0CD1-4C06-B672-365EECA26C73}'], dtype='<U50')

unique应用于:

In [243]: np.unique(_)
Out[243]: 
array(['{893EE51E-0CD1-4C06-B672-365EECA26C33}',
       '{893EE51E-0CD1-4C06-B672-365EECA26C63}',
       '{893EE51E-0CD1-4C06-B672-365EECA26C73}'], dtype='<U50')

在切片第一列后使用^{}[:, 0]

>>> np.unique(arr[:,0])

array(['{893EE51E-0CD1-4C06-B672-365EECA26C33}',
       '{893EE51E-0CD1-4C06-B672-365EECA26C63}',
       '{893EE51E-0CD1-4C06-B672-365EECA26C73}'], dtype=object)

将set()与列表理解结合使用:

x = [
('{893EE51E-0CD1-4C06-B672-365EECA26C33}', 'image/jpeg', 'Photo1.jpg', []),
('{893EE51E-0CD1-4C06-B672-365EECA26C33}', 'image/jpeg', 'Photo2.jpg', []),
('{893EE51E-0CD1-4C06-B672-365EECA26C63}', 'image/jpeg', 'Photo1.jpg', []),
('{893EE51E-0CD1-4C06-B672-365EECA26C73}', 'image/jpeg', 'Photo1.jpg', [])
]
y = set(i[0] for i in x)
y
{'{893EE51E-0CD1-4C06-B672-365EECA26C63}',
 '{893EE51E-0CD1-4C06-B672-365EECA26C73}',
 '{893EE51E-0CD1-4C06-B672-365EECA26C33}'}

相关问题 更多 >