Numpy 在数组中查找元组并获取其索引和值
我有一个这样的数组Numpy 在数组中查找元组并获取其索引和值,numpy,tuples,numpy-ndarray,Numpy,Tuples,Numpy Ndarray,我有一个这样的数组 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,1),则在其值47+2上加2 如果
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,1),则在其值47+2上加2
如果数组不包含(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数组。对于对象数据类型,速度和存储类似于列表(甚至可能更慢) 这种数组的一个优点是可以轻松访问“列”:
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
这是错误的数据结构。您可能需要dict,但不是arrayi,我目前正在使用默认dict,但它太消耗内存,无法搜索密钥并更新它。我以为使用numpy数组会减少内存字典有多大?它将如何使用?如果你没有足够的记忆,你可以考虑一个数据库(PASGRESs)。使用defaultdict时内存不足?所以只使用dict而不是defaultdict?没有办法通过numpy解决问题吗?我也可以改变我的数组结构,而不是让元组数组也可以得到[[115,1,47]]
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)