在数组中查找元组并获取其索引和值



我有一个类似的数组

np.array([[(115, 1), 47],
[(115, 2), 1],
[(115, 3), 3],
[(2147482888, 5), 26],
[(275030867, 5), 3]], dtype=object)

如何获得所需的元组,比如(115,1(并获得其对应的元组值47,并根据某个条件

假设如果数组包含(115,1(,我想得到(115

如果数组不包含(10009,10(,则将其添加到默认值为10 的数组中

感谢

数组最适合用于连续的同质数据块(例如,浮点数组的n(。听起来你想要一个dict,它是键值对。在这种情况下,您可以执行以下操作:

# original data
x = np.array([[(115, 1), 47],
[(115, 2), 1],
[(115, 3), 3],
[(2147482888, 5), 26],
[(275030867, 5), 3],
[0, 0]], dtype=object)
d = dict(x)
d[(115,1)] += 2

输出:

{(115, 1): 49,
(115, 2): 1,
(115, 3): 3,
(2147482888, 5): 26,
(275030867, 5): 3,
0: 0}

快速紧凑仅适用于数字numpy数组。对于对象dtype,速度和存储类似于列表(甚至可能更慢(。

In [39]: arr =np.array([[(115, 1), 47],
...:        [(115, 2), 1],
...:        [(115, 3), 3],
...:        [(2147482888, 5), 26],
...:        [(275030867, 5), 3]], dtype=object)
In [40]: arr.shape
Out[40]: (5, 2)

这种数组的一个优点是它很容易访问"列":

In [41]: arr[:,0]
Out[41]: 
array([(115, 1), (115, 2), (115, 3), (2147482888, 5), (275030867, 5)],
dtype=object)
In [42]: arr[:,1]
Out[42]: array([47, 1, 3, 26, 3], dtype=object)

整个数组作为列表列表:

In [43]: alist = arr.tolist()
In [44]: alist
Out[44]: 
[[(115, 1), 47],
[(115, 2), 1],
[(115, 3), 3],
[(2147482888, 5), 26],
[(275030867, 5), 3]]

但对于查找元组,使用元组列表更容易:

In [47]: alist = arr[:,0].tolist()
In [48]: alist
Out[48]: [(115, 1), (115, 2), (115, 3), (2147482888, 5), (275030867, 5)]
In [49]: alist.index((115,1))
Out[49]: 0
In [50]: alist.index((115,3))
Out[50]: 2
In [51]: arr[2,:]
Out[51]: array([(115, 3), 3], dtype=object)

也就是说,你的结构和期望的动作看起来更像字典动作。查找"密钥"并添加它们不是numpy的自然选择。

最新更新