In Julia, if speed isn't too important, this gives the same results:

a, b = [-1,-2,-3], [-3,-4,-5,-2]
inter = intersect(a, b)
(Int[findfirst(a, x) for x in inter], Int[findfirst(b, x) for x in inter])

And it should be a good deal faster than the MATLABism. Other functions you
might find useful: ind2sub, div (integer division)

On Tue, Jul 5, 2016 at 12:20 PM, siyu song <[email protected]> wrote:

> Thanks, Fred, for your answer. But in fact I want to know the index of the
> common elements of two integer vectors(Elements are all different in each
> vectors).
> For example, v1 = [1,2,3] and v2[3,4,5,2]. So the answer should be
> common_index1 = [2,3], common_index2 = [1,4].
> I use a function as
> function find_common(a,b)
>    a = reshape(a,length(a),1);
>    b = reshape(b,1,length(b));
>    la = length(a);
>    lb = length(b);
>    a = a[:,ones(1,lb)];
>    b = b[ones(la,1),:];
>    comab = find(x->x==true,a .== b);
>    comab = comab.';
>    coma = mod(comab+la-1,la)+1;
>    comb = floor(Int64,(comab+la-1)/la);
>    return coma,comb;
> end
>
> So coma and comb is exactly what I want. In matlab this is easy to do. But
> with julia, I haven't thought of a clever answer yet.
> In matlab we can simply get coma and comb by [coma, comb] = find(a==b).
>
> 在 2016年7月5日星期二 UTC+9下午7:02:34,Fred写道:
>
>> julia> a=[1,3,5,7]
>> 4-element Array{Int64,1}:
>>  1
>>  3
>>  5
>>  7
>>
>>
>> julia> b=[2,3,5,6,7]
>> 5-element Array{Int64,1}:
>>  2
>>  3
>>  5
>>  6
>>  7
>>
>>
>> julia> intersect(a,b)
>> 3-element Array{Int64,1}:
>>  3
>>  5
>>  7
>>
>>
>> julia> union(a,b)
>> 6-element Array{Int64,1}:
>>  1
>>  3
>>  5
>>  7
>>  2
>>  6
>>
>>
>>
>> Le lundi 4 juillet 2016 04:18:10 UTC+2, siyu song a écrit :
>>>
>>> But intersect doesn't tell us the index of the elements in the
>>> matrix(array), I think.
>>>
>>

Reply via email to