[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