[Scilab-users] Generating a boolean vector or matrix

Stéphane Mottelet stephane.mottelet at utc.fr
Fri Sep 13 15:32:23 CEST 2019


Le 13/09/2019 à 15:04, Samuel Gougeon a écrit :
> Le 04/09/2019 à 09:11, Federico Miyara a écrit :
>>
>> Dear all,
>>
>> I need to create a boolean vector, such as [%t, %t, %t, %t] but with 
>> a number of components given by a variable n. I couldn't find a 
>> function similar to ones(1,n).
>>
>> However I've found a workaround:
>>
>> a = ones(1,n) & %t
>>
>> It shouldn't work because ones(1,n) is not boolean, but it does.
>>
>> Questions:
>> 1) Why does it work?
>> 2) Is there some native function to create bolean matrices
>> 3) If not, are there any plans to introduce functions such as 
>> true(m,n) or false(m,n)?
>
>
> I hope no. These are typical -- IMO fake -- functions that i would not 
> expect in Scilab (and in any other language). There are many trivial 
> and fast ways to create a boolean array of given dimensions.
>
> To me, the only need is to document these trivial ways in the help 
> pages of %F and %T.
> Replacing a few lines of documentation with a lot of trivial 
> duplicated codes, separate pages, separate tests always look a very 
> bad idea to me.
>
> But i can understand that, for some habit reason, former octavers 
> would appreciate their usual functions.
> This is why i don't clearly understand why this sub-community does not 
> build /and maintain/ a "Matlabic" ATOMS package gathering this kind of 
> "aliases", or do not invest time to contribute to the m2sci converter 
> improvement.
>
> Even when repmat() will be fastened by a factor 7 through its upgrade 
> pending for 7 months now 
> <https://antispam.utc.fr/proxy/2/c3RlcGhhbmUubW90dGVsZXRAdXRjLmZy/codereview.scilab.org/#/c/19782>, 
> it won't be the optimal way, noticeably due to its overhead.
>
> I am neither very convinced by the ones(m,n,.,"boolean") and 
> zeros(m,n,.. "boolean") proposal, for the same reason initially 
> exposed by Alain. But why not.
> In the same commit, Stéphane proposes to allow using the *"logical"* 
> keyword as an equivalent of the "boolean" one. On this side, i 
> definitively disagree with this. Indeed,
>
>  1. it would be useless, adding strictly no value to scilab
>  2. it would introduce a confusion for everyone, including for former
>     octavers, since in Octave an array of logical type is made of 0
>     and 1, not of %F and %T. While in Scilab we can also have arrays
>     of 0 and 1.
>
OK Samuel, I can forget this one. However, "double" should be kept as an 
equivalent of "constant", even if not the name of a scilab type returned 
by typeof(). We already have the macro "double()" (instead of 
"constant()") and the keyword "double" used everywhere in the API.
>
> 1.
>
>
> About trivial ways, a preliminary note -- and answer to Federico :
>
>> 2) How much memory does it take a boolean scalar? Does a boolean 
>> vector eploit the fact that a byte could theoretically host up to 8 
>> boolean components?
>
> 4 bytes / boolean. This big memory waste is reported since a while: 
> http://bugzilla.scilab.org/12789
>
I think it was stored as 4 bytes for historical reasons (in Visual 
Studio up to version 4.2 C++ int was 4 bytes)
>
> This means that, using an array of decimal numbers to create a boolean 
> array uses an intermediate memory "only" ~twice bigger than the final 
> result.
>
> About some trivial efficient ways:
>
>   * Array of %F :
>       o zeros(m,n,..)==1
>         as Christophe does, the way i use when, for 99,5% of cases, a
>         factor 2 in intermediate memory is not critical
>       o a(m,n,..) = %f;
>         or safer:
>         clear a, a(m,n,..) = %f;
>   * Array of %T :
>       o zeros(m,n,..)==0
>       o a(m,n,..) = %f; ~a
>   * Random boolean array :
>       o rand(m,n,..) < 0.5
>
> Personnaly, i don't need any option for getting all this. But 
> documenting it would be useful.
> In the same way, we can use
>
>   * clear c, c =(5,4,7) = %i*0 // to initiate an array of 0+0i
>     complex-encoded array
>   * clear p, p(5,4,7) = %z*0  // to initiate an array of 0z polynomials
>   * etc
>
> .. still without any specific functions or option.
>
> Best regards
> Samuel
>
>
> _______________________________________________
> users mailing list
> users at lists.scilab.org
> https://antispam.utc.fr/proxy/1/c3RlcGhhbmUubW90dGVsZXRAdXRjLmZy/lists.scilab.org/mailman/listinfo/users

-- 
Stéphane Mottelet
Ingénieur de recherche
EA 4297 Transformations Intégrées de la Matière Renouvelable
Département Génie des Procédés Industriels
Sorbonne Universités - Université de Technologie de Compiègne
CS 60319, 60203 Compiègne cedex
Tel : +33(0)344234688
http://www.utc.fr/~mottelet

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.scilab.org/pipermail/users/attachments/20190913/fd1323ca/attachment.htm>


More information about the users mailing list