在尝试优化代码的许多尝试之后,似乎最后一个资源是尝试使用多个核运行下面的代码.我不知道如何转换/重新构建我的代码,以便使用多个内核可以更快地运行.如果我能获得指导以实现最终目标,我将不胜感激.最终目标是能够尽快为阵列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 …Run Code Online (Sandbox Code Playgroud) 我有两个1D数组,我想知道一个数组中的元素是否出现在另一个数组中.
例如:
import numpy as np
A = np.array([ 1, 48, 50, 78, 85, 97])
B = np.array([38, 43, 50, 62, 78, 85])
Run Code Online (Sandbox Code Playgroud)
我想要:
C = [2,3,4] # since 50 in second array occurs in first array at index 2,
# similarly 78 in second array occurs in first array in index 3,
# similarly for 85, it is index 4
Run Code Online (Sandbox Code Playgroud)
我试过了:
accuracy = np.searchsorted(A, B)
Run Code Online (Sandbox Code Playgroud)
但它给我带来了不良后果.
作为挑战,我给自己这个问题:
给定2个列表A和B,其中B是A的混乱版本,其想法是找出混洗的索引.
例如:
A = [10, 40, 30, 2]
B = [30, 2, 10, 40]
result = [2, 3, 0, 1]
A[2] A[3] A[0] A[1]
|| || || ||
30 2 10 40
Run Code Online (Sandbox Code Playgroud)
请注意,相同元素的关系可以任意解决.
我想出了一个解决方案,涉及使用字典来存储索引.这个问题有什么其他可能的解决方案?使用库的解决方案也有效.Numpy,pandas,一切都很好.
给定一个整数数组,我需要找到存储在不同数组中的许多元素的索引。这是:
import numpy as np
a1 = np.array([ 4, 5, 6, 1, 2, 3, 7, 86, 9, 15])
a2 = np.array([ 2, 3, 5, 6, 9])
Run Code Online (Sandbox Code Playgroud)
a1我的初始元素数组在哪里,a2是包含我需要在a1.
在这种情况下,结果应该是:
a3 = ([4, 5, 1, 2, 8])
Run Code Online (Sandbox Code Playgroud)
这似乎是一个相当简单的操作,但我一直无法弄清楚如何去做。
我有 2numpy array个不同尺寸的。理论上,一个将是另一个的子集。我想在较大的索引中找到numpy array其值与较小的子集匹配的索引。
例如
A = [ 7.52 8.32 16.96 20.05 -24.96 -42.69 -47.47 55.04 -57.62 2.03
61.94 64.41 -71.3 93.6 151.65 151.75 -0.43 -3.18 4.59 -5.55
6.44 -9.48 9.31 0.67 -14.34 -8.09 16.23 17.69 19.46 23.52
-52.59]
B = [61.94 16.23 19.46 -5.55 -0.43 93.6]
Run Code Online (Sandbox Code Playgroud)
2 个for循环将执行此操作,但我想知道是否有 Python 方法可以更快地执行此操作。
我尝试了一个循环,但它不起作用(我怀疑numpy.where它不适用于不同大小的数组)
A = [ 7.52 8.32 16.96 20.05 -24.96 -42.69 -47.47 55.04 -57.62 2.03
61.94 64.41 -71.3 93.6 151.65 151.75 -0.43 …Run Code Online (Sandbox Code Playgroud) 我正在尝试从一个numpy数组中获取索引值,我尝试使用相交而不是徒劳。我只是想在2个数组中查找类似的值。一个是2D,我要选择一列,另一个是1D,仅是要搜索的值列表,因此实际上只有2个1D数组。
我们将此数组称为:
array([[ 1, 97553, 1],
[ 1, 97587, 1],
[ 1, 97612, 1],
[ 1, 97697, 1],
[ 1, 97826, 3],
[ 1, 97832, 1],
[ 1, 97839, 1],
[ 1, 97887, 1],
[ 1, 97944, 1],
[ 1, 97955, 2]])
Run Code Online (Sandbox Code Playgroud)
我们正在搜索说, values = numpy.array([97612, 97633, 97697, 97999, 97943, 97944])
所以我尝试:
numpy.where(a[:, 1] == values)
Run Code Online (Sandbox Code Playgroud)
而且我希望可以得到一堆值的索引,但是取而代之的是,我得到了一个空数组,它吐出了[(array([], dtype=int64),)]。
如果我尝试这样做:
numpy.where(a[:, 1] == 97697)
Run Code Online (Sandbox Code Playgroud)
它给了我回报(array([2]),),这就是我所期望的。
我在这里缺少数组的怪异之处吗?还是有可能更简单的方法来做到这一点?如我所料,查找数组索引和匹配数组似乎不起作用。当我想通过指数或唯一值找到数组的并集或相交时,它似乎无法正常工作。任何帮助都将是超级。谢谢。
编辑: 根据沃伦斯的要求:
import numpy
a = numpy.array([[ 1, 97553, 1],
[ …Run Code Online (Sandbox Code Playgroud)