[Scilab-users] vectoriztion and sets of data
Serge Steer
Serge.Steer at inria.fr
Fri Nov 23 13:29:00 CET 2012
I am not sure to have really understood the problem
But may be you can vectorize this way
max(abs(matrix(C,8,:)),'r')
Serge Steer
Le 23/11/2012 09:54, Adrien Vogt-Schilb a écrit :
> On 22/11/2012 22:59, Paul Carrico wrote:
>>
>> Thanks for your suggestion ; it's is interesting for another specific
>> development... unfortunately I don't think I cannot adapt that code
>> for my project !
>>
>> Indeed I need to work on sets of data (n rows of data at the same
>> time to select, to rearrange, to transform, to mean, etc. ...) on
>> matrix on size on X*n rows (X may be 100 000 ... ) ; currently I use
>> loops as described above ...
>>
>> ... the issue is to optimize the following line through vectorized "i" index:Search = max(abs(C([i. * 8 - 7 :i. * 8],:)))
>
> Hi
>
> Right.
> Well a trivial improvment is still :
>
> D=zeros((nr/8),1);
>
> fori=1:(nr/8)
>
> D=max(abs(C((8*(i-1)+1):(8*i),:)))>0; //oh, that's what you meant
> with "ok with the if"
>
> end
>
> But you want to get rid of the loop I gess.
>
>
> Do you actually build the C matrix yourself as in the example?
>
> I believe your example is equivalent to:
>
> A=rand(8,6);
>
> B=zeros(8,6);
>
> C=[A;A;B;A;B;B;A];
>
> D=[max(abs(A))>0; max(abs(A))>0; max(abs(B))>0; max(abs(A))>0;
> max(abs(B))>0; max(abs(B))>0; max(abs(A))>0]
>
> or better to
>
> isA = max(abs(A))>0;
> isB =max(abs(B))>0;
>
>
> C=[isA; isA; isB; isA; isB; isB; isA]
>
> in other words: the idea is to write D while you build C, not once C
> is built entirely. Does that make sense for your actual code?
>
>
>> Si let 's rack one's brains ...
>>
>> Thanks
>>
>> Paul
>>
>> *De :*users-bounces at lists.scilab.org
>> [mailto:users-bounces at lists.scilab.org] *De la part de* Adrien
>> Vogt-Schilb
>> *Envoyé :* jeudi 22 novembre 2012 16:12
>> *À :* International users mailing list for Scilab.
>> *Objet :*Re: [Scilab-users] vectoriztion and sets of data
>>
>> Hi again
>>
>> I am still not sure, but look at the output of
>>
>> A=rand(8,6)
>>
>> B=zeros(8,6)
>>
>> D = A > B
>>
>> D = bool2s (A > B)
>>
>> This might give you insight on how to solve your problem
>> tell me if not
>>
>> On 22/11/2012 16:06, Paul Carrico wrote:
>>
>> The original code looked like ... I'm trying to optimized it (ok
>> for the "if", but how to combine a set of data and vectorization
>> (??? Many trials but I failed)
>>
>> /// initial matrix/
>>
>> A=rand(8,6);
>>
>> B=zeros(8,6);
>>
>> C=[A;A;B;A;B;B;A];
>>
>> [nr,nc]=size(C);
>>
>> /// original code looks like/
>>
>> D=zeros((nr/8),1);
>>
>> fori=1:(nr/8)
>>
>> search=max(abs(C((8*(i-1)+1):(8*i),:)));
>>
>> if(search>0)then
>>
>> D(i,1)=1;
>>
>> else
>>
>> D(i,1)=0;
>>
>> end
>>
>> end
>>
>> ###################################################
>>
>> mode(0)
>>
>>
>>
>> /// initial matrix/
>>
>> A = rand(8,6);
>>
>> B = zeros(8,6);
>>
>> C = [A ; A; B
>> ; A; B; B; A];
>>
>> [nr,nc] = size(C);
>>
>>
>>
>> /// each set of 8 rows is analysed/
>>
>> Search = zeros((nr/8),1);
>>
>> ///i = ones((nr/8),1).* 1;/
>>
>> i = [1:(nr/8)]';
>>
>> /// Search = max(abs(C((8*(i - 1) + 1):(8 * i),:)));/
>>
>> Search = max(abs(C([i!
>> . * 8 - 7 :i. * 8],:)))
>>
>> ;
>>
>> B = (find(Search == 0))';
>>
>>
>>
>> D = zeros((nr/8),1);
>>
>> D(B,2) = 1;
>>
>>
>>
>> _______________________________________________
>> users mailing list
>> users at lists.scilab.org
>> http://lists.scilab.org/mailman/listinfo/users
>
>
>
> _______________________________________________
> users mailing list
> users at lists.scilab.org
> http://lists.scilab.org/mailman/listinfo/users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.scilab.org/pipermail/users/attachments/20121123/badcb301/attachment.htm>
More information about the users
mailing list