[Scilab-Dev] SEP 95: issquare()

Samuel Gougeon sgougeon at free.fr
Sun May 12 22:18:23 CEST 2013


Hi,

A SEP 95 was recently submitted in CodeReview:
https://codereview.scilab.org/cat/11455%2C2%2CSEP/SEP_095_ismatrix_isrow_iscolumn_issquare.odt

Despite no input is expected since the SEP has not been posted here (as not
foreseen by the SEP#0), here are a few comments about the proposal, for 
issquare().
Other comments about other proposed functions will be posted in a 
separated thread.

The full rationale says:
/These functions are some elementary functions that exist in Matlab to 
check if a matrix or a //
//vector is a matrix, a row, a column or a square matrix /

I have already written about the weight of any Matlab-mania. It looks 
here the main
and even single input argument for Scilab Enterprises. Then, i am 
wondering about what
should be the output, and if there is some tacit agreement between both 
companies.

By the way, AFAIK, issquare() is not a native Matlab function. It is 
only proposed by a matlaber
in FileExchange.  IMO, the gain of introducing issquare() is very small.

The proposed implementation is also very restricted:
https://codereview.scilab.org/#/c/11455/2/scilab/modules/elementary_functions/macros/issquare.sci 
:

function  r=issquare(v)
    // (checking input parameters. Then:)
    if  size(size(v),'*')  ==  1  |  size(v,1)  ==1  then
         r  =  %f;
     elseif  size(v,1)  ==  size(v,2)
         r=%t;
     else  
         r=%f;
     end
endfunction


*Suggested definition*: issquare(v) should return %T as soon as all 
non-null dimensions of v
(that are not singleton) are equal.
For example, this means, for any type of data in matrix or hypermatrix, 
with dense or sparse encoding:

issquare([])            // => %F : this could be conventional
issquare(%pi)           // => %T: yes, a scalar is a square matrix
issquare(emptystr(2,2)) // => %T, as expected
issquare(rand(2,1,2))   // => %T, oriented along (x,z) instead of (x,y), 
but truly square.
issquare(rand(2,2,2))   // => %T: a straighforward extension to 3D.
            // There is no reason to implement specific iscube(), 
ishypercube().. functions
issquare(rand(2,2,3))   // => %F : only cubes accepted
issquare(rand(2,2,2,2)) // => %T...

While the present implementation disagrees in the following cases:
-->issquare([])
  ans  =
   T

-->issquare(%pi)
  ans  =
   F

-->issquare(rand(2,1,2))
  ans  =
   F

-->issquare(rand(2,2,3))
  ans  =
   T

So, what do we do?

Here is an alternate implementation, if one is really required:

function  r  =issquare(v)
     s  =  size(squeeze(v))
     s  =  s(s>0)    // to reject [ ]
     r  =  length(unique(s))==1
endfunction

To be tested on sparse samples.
Since there are here likely hundreds of subscribers, other inputs would 
be welcome.
Designing Scilab should be the matter of all present and forthcoming users.

Regards
Samuel Gougeon

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.scilab.org/pipermail/dev/attachments/20130512/be977e75/attachment.htm>


More information about the dev mailing list