相关疑难解决方法(0)

Python相当于MATLAB的"ismember"函数

在尝试优化代码的许多尝试之后,似乎最后一个资源是尝试使用多个核运行下面的代码.我不知道如何转换/重新构建我的代码,以便使用多个内核可以更快地运行.如果我能获得指导以实现最终目标,我将不胜感激.最终目标是能够尽快为阵列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)

python optimization matlab numpy

20
推荐指数
2
解决办法
2万
查看次数

在NumPy中复制Matlab的ISMEMBER函数的索引结果?

我一直绞尽脑汁寻找一个与这个老问题相符的解决方案.我一直在尝试找到一个复制索引结果的Python代码模式.例如:

A = [3;4;4;3;6]
B = [2;5;2;6;3;2;2;5]
[tf ix] = ismember(A,B)
>> A(tf)

ans =

     3
     3
     6
>> B(ix(tf))

ans =

     3
     3
     6
Run Code Online (Sandbox Code Playgroud)

这允许我做的是,如果有一个数组C的排序方式与BI现在可以适当地将C的值插入到一个新的数组D中,该数组D的排序方式与A相同.我做了很多数据映射!我希望这能用于各种数据类型,特别是字符串和日期时间.看起来numpy的in1d让我在那里走了一半.我也对其他Pythonic想法持开放态度!

D(tf) = C(ix(tf))
Run Code Online (Sandbox Code Playgroud)

谢谢!

python matlab numpy

3
推荐指数
1
解决办法
1443
查看次数

标签 统计

matlab ×2

numpy ×2

python ×2

optimization ×1