在多次尝试优化代码之后,似乎最后一个资源是尝试使用多个内核运行下面的代码。我不确切知道如何转换/重新构造我的代码,以便它可以使用多个内核运行得更快。如果我能得到指导以实现最终目标,我将不胜感激。最终目标是能够尽可能快地为数组 A 和 B 运行此代码,其中每个数组包含大约 700,000 个元素。这是使用小数组的代码。700k 元素数组被注释掉。
import numpy as np
def ismember(a,b):
for i in a:
index = np.where(b==i)[0]
if index.size == 0:
yield 0
else:
yield index
def f(A, gen_obj):
my_array = np.arange(len(A))
for i in my_array:
my_array[i] = gen_obj.next()
return my_array
#A = np.arange(700000)
#B = np.arange(700000)
A = np.array([3,4,4,3,6])
B = np.array([2,5,2,6,3])
gen_obj = ismember(A,B)
f(A, gen_obj)
print 'done'
# if we print f(A, gen_obj) the output will be: [4 0 0 4 3]
# notice that the output array needs to be kept the same size as array A.
我想要做的是模仿一个名为ismember [2] 的 MATLAB 函数(格式为: 的那个[Lia,Locb] = ismember(A,B)
。我只是想得到这个Locb
部分。
来自 Matlab:Locb,对于 A 中属于 B 的每个值,包含 B 中的最低索引。输出数组 Locb 包含 0,只要 A 不是 B 的成员
主要问题之一是我需要能够尽可能高效地执行此操作。为了测试,我有两个 700k 元素的数组。创建一个生成器并检查生成器的值似乎并不能快速完成工作。