我是新来的矢量化和生成器。到目前为止,我已经创建了以下函数:
import numpy as np
def ismember(a,b):
for i in a:
if len(np.where(b==i)[0]) == 0:
lv_var = 0
else:
lv_var = np.int(np.where(b==i)[0])
yield lv_var
vect = np.vectorize(ismember)
A = np.array(xrange(700000))
B = np.array(xrange(700000))
lv_result = vect(A,B)
当我试图将lv_result
转换为一个列表或循环遍历结果numpy数组时,我得到了一个生成器对象的列表。我得想办法得到实际结果。如何打印此函数的实际结果?^生成器上的{
有人能告诉我我做错了什么吗?或者我如何重新配置代码以实现最终目标?在
好了,我现在理解了向量化部分(谢谢您的示例Viet Nguyen)。
我还可以打印生成器对象的结果。代码已被修改。请看下面。在
对于发电机部分:
我要做的是模拟一个名为ismember(格式为:[Lia,Locb]=ismember(a,B)的MATLAB函数。我只是想弄到Locb的零件。在
From Matlab: Locb, contain the lowest index in B for each value in A that is a member of B. The output array, Locb, contains 0 wherever A is not a member of B
其中一个主要问题是我需要尽可能高效地执行这个操作。为了测试,我有两个700k元素的数组。创建一个生成器并查看生成器的值似乎不会获得更好的性能。在
为了打印生成器,我在下面创建了函数f()。在
^{pr2}$注意:如果我们要用较小的数组尝试上述代码: 我们说吧。在
A=np.数组([3,4,4,3,6])
B=np.数组([2,5,2,6,3])
结果将是一个数组:[4 0 0 4 3]
就像matlabs函数一样:目标是为A中属于B的每个值获取B中的最低索引。如果A不是B的成员,则输出数组Locb包含0
Numpy的交集函数不能帮助我实现目标。同样,返回数组的大小需要保持与数组A的大小相同
到目前为止,这个过程需要花费很长时间(对于700k个元素的数组)。不幸的是,我还没有找到最好的解决办法。任何关于如何重新配置代码以实现最终目标、以最佳性能的输入都将非常感谢。在
我相信您误解了} reference )。您的函数}是数组。相反,请将该函数想象为您将与内置的
numpy.vectorize
函数的输入。“矢量化”函数按元素对数组进行操作(see ^{ismember
似乎假定输入a
和{map()
一起使用的功能。在另外,如果我正确理解你的意图,NumPy带有一个intersection function。在
相关问题 更多 >
编程相关推荐