0

各位专家早安

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

#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])

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

非常感谢您的帮助

德语

4

2 回答 2

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) )
于 2012-09-11T09:38:39.440 回答
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 中的任何整体。


编辑过的代码,它本身就是错误的(或非常有限的)......

于 2012-09-11T11:14:06.837 回答