在numpy中从数组创建索引数组

时间:2012-09-11 09:25:27

标签: python arrays list numpy indexing

早上好专家,

我有一个包含整数的数组,我有一个列表,其中包含按特殊顺序排序的数组中的唯一值。我想要的是创建另一个数组,它将包含数组中每个值的索引。

#a numpy array with integer values
#size_x and size_y: array dimensions of a
#index_list contain the unique values of a sorted in a special order.
#b New array with the index values

for i in xrange(0,size_x):
     for j in xrange(0,size_y):                    
         b[i][j]=index_list.index(a[i][j])

这可行,但需要很长时间才能完成。有没有更快的方法呢?

非常感谢你的帮助

德国

2 个答案:

答案 0 :(得分:2)

缓慢的部分是查找

index_list.index(a[i][j])

将Python字典用于此任务会更快,即。而不是

index_list = [ item_0, item_1, item_2, ...]

使用

index_dict = { item_0:0,  item_1:1, item_2:2, ...}

可以使用以下方式创建:

index_dict = dict( (item, i) for i, item in enumerate(index_list) )

答案 1 :(得分:1)

没有尝试,但由于这是纯粹的numpy,它应该比基于字典的方法快得多:

# note that the code will use the next higher value if a value is
# missing from index_list.
new_vals, old_index = np.unique(index_list, return_index=True)

# use searchsorted to find the index:
b_new_index = np.searchsorted(new_vals, a)

# And the original index:
b = old_index[b_new_index]

或者你可以简单地填写index_list中的任何整体。


编辑过的代码,就像这样完全错误(或非常有限)......