Python:如何索引numpy数组的元素?

时间:2015-06-01 23:18:13

标签: python arrays numpy indexing

我正在寻找一个函数来完成函数where在以下假设代码中的作用:

>>> c='''<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
             <sitemap><loc>http://www.vudu.com/sitemap-static.xml</loc></sitemap>
         </sitemapindex>'''
>>> node=etree.fromstring(c)
>>> node.xpath('//loc')
[]
  

{1:[(0,0)],2:[(0,1),(1,0)],3:[(0,2),(1,1)],4:[( 1,2)]}

具体来说,我想生成一个字典,其字符串是扁平数组中的唯一元素,其值是相应键的完整索引的列表。

我查看了node函数,但它似乎没有为大型数组提供有效的解决方法。最好的方法是什么?

注意:我正在使用Python 2.7

3 个答案:

答案 0 :(得分:1)

鉴于您所需的输出是字典,我认为通过NumPy操作,这将成为一种有效的方法。你最好的选择可能是

import collections
import itertools

d = collections.defaultdict(list)
for indices in itertools.product(*map(range, a.shape)):
    d[a[indices]].append(indices)

答案 1 :(得分:0)

numpy_indexed包可以以高效且完全矢量化的方式执行这些分组操作,即:

import numpy_indexed as npi
a = np.array([[1, 2, 3], [2, 3, 4]])
keys, values = npi.group_by(a.reshape(-1), np.indices(a.shape).reshape(-1, a.ndim))

答案 2 :(得分:-1)

我不知道numpy,但如果只是使用数组,这是一个示例解决方案:

arrs = [[1, 2, 3], [2, 3, 4]]
dict = {}

for i in range(0, len(arrs)):
    arr = arrs[i]
    for j in range(0, len(arr)):
        num = arr[j]
        indices = dict.get(num)
        if indices is None:
            dict[num] = [(i, j)]
        else:
            dict[num].append((i, j))