[scilab-Users] Emulate Matlab's ismember function in Scilab
Sébastien Bihorel
pomchip at free.fr
Wed Nov 11 19:15:26 CET 2009
Thank you very much.
I am working on the translation of my application from Matlab to Scilab
syntax, and there is a fair amount of work still to be done. So, no hurry.
Sebastien
PS: ain't that funny that most of the people posting on this forum are
French or working in French-speaking institutions but write in English ? :D
On Wed, Nov 11, 2009 at 12:03 PM, Samuel Gougeon <
Samuel.Gougeon at univ-lemans.fr> wrote:
> Hello Sébastien,
>
> Sébastien Bihorel <pomchip at free.fr> a écrit :
>
>
> Thanks your very much Samuel,
>>
>> This works such fine for the application I intend to use this code for.
>>
>> I assume that you are the author of this code, but, for some copyright
>> issues, I would like that you confirm this point to me.
>>
>
> That's right
>
>
> If indeed you are,
>> would you authorize me to use (and/or modify) your code as part of an
>> application distributed under a GNU license? To preserve appropriate
>> copyrights, I could either add your name and affiliation in a comment
>> section at the beginning of the .sci file or you could maybe create such
>> an
>> .sci and sent it to me at your convenience.
>>
>
> I will do so as soon as possible. I am aiming to propose this function
> (with
> improvements) as a SEP for Scilab ; then, i must get more infos from the
> Scilab's consortium about licensing of such contribs. I guess that it will
> be either under a GPL or Cecill license.
>
> If this matter urges for you, please note my Affiliation:
> Samuel Gougeon - Université du Maine, France (2009)
>
> Here is an improved release of ismember(), that now supports
> %inf values either in A or S, and with fixed mistakes in the
> head_comments:
>
> ----
> function loc=ismember(A,S, highest)
> // loc = ismember(A, S, highest)
> //
> // A : Matrix of booleans, integers, reals, complexes, polynomes
> // (or any datatype supporting #*R real multiplication and ==
> // inter-comparison).
>
> // S : Matrix of same datatype than S
> // highest : Scalar boolean
> //
> // ismember() returns a matrix loc of A's format. loc(i,j) = linear
> // index in S of the first (highest ==%F), or the last (highest==%T)
> // occurrence of A(i,j). loc(i,j) returns zero if A(i,j) is not found.
> //
> // COPYRIGHT : Samuel GOUGEON - Université du Maine, France (2009)
> // LICENSE : CeCILL
>
> //
> LA=length(A);
> LS=length(S);
> A2=matrix(A,LA,1)*ones(1,LS) ;
> S2=(matrix(S,LS,1)*ones(1,LA)).' ;
> d01 =double(A2==S2);
> S_ind=ones(LA,1)*(1:LS);
> tmp=d01.*S_ind;
> if highest,
> tmp2=max(tmp,'c');
> else
> tmp(tmp==0)=2*LS; // Masks zeros=unfound as min values
> tmp2=min(tmp,'c');
> tmp2(tmp2==2*LS)=0; // Retrieves zeros=unfound
>
> end
> loc=matrix(tmp2,size(A));
> endfunction
> ----
> -->A,S
> A =
>
> 7. 3.
> Inf 0.
>
> 8. 1.
> S =
>
> 5. 8. 0. 4.
> 3. 4. 7. 7.
> 3. Inf Inf 2.
>
> 7. 5. 5. 8.
>
> -->ismember(A,S,%f)
> ans =
>
> 4. 2.
> 7. 9.
>
> 5. 0.
>
> -->ismember(A,S,%t)
> ans =
>
> 14. 3.
> 11. 9.
> 16. 0.
> ---------
> Regards
> Samuel
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.scilab.org/pipermail/users/attachments/20091111/030c2c7e/attachment.htm>
More information about the users
mailing list