早上好专家,
我有一个包含整数的数组,我有一个列表,其中包含按特殊顺序排序的数组中的唯一值。我想要的是创建另一个数组,它将包含数组中每个值的索引。
#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])
这可行,但需要很长时间才能完成。有没有更快的方法呢?
非常感谢你的帮助
德国
答案 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中的任何整体。
编辑过的代码,就像这样完全错误(或非常有限)......