Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Numpy 在数组中查找元组并获取其索引和值_Numpy_Tuples_Numpy Ndarray - Fatal编程技术网

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)