[Scilab-Dev] SEP #95 : ismatrix(), isrow(), iscolumn(), IsAScalar()
Samuel Gougeon
sgougeon at free.fr
Mon May 13 01:49:35 CEST 2013
Hello,
This SEP has been posted under the review
https://codereview.scilab.org/#/c/11455/ :
https://codereview.scilab.org/cat/11455%2C2%2CSEP/SEP_095_ismatrix_isrow_iscolumn_issquare.odt
The case of issquare() is discussed in the separated thread
http://mailinglists.scilab.org/SEP-95-issquare-tt4026683.html
The full rationale of this SEP 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 /
No more comments about this a-priori Matlab worship.
About these 4 functions: difficult to me thinking that their
implementation is a priority,
or even really needed. Let's consider that they could be useful, and
start with the most
provocative one:
*IsAScalar()*:
* is replacing size(A,"*")==1withIsAScalar(A)worthwhile??
About it: where are the capitals? I have already forgotten... Happily,
there are 5 help maintained pages in en, fr, ru, pt and ja to get them.
Ouf.
Pushing Scilab on this side, it should finally fall...
By the way, won't matlabers -- that are expected to love it -- shout
"Is it isscalar(), or something else ?"
It would rather deserve a class action against it, wouldn't it? At
least.
By the way, the posted help page says that IsAScalar() could be applied
only to decimals. I agree, it will never be too weak :-)
How is it possible to still weaken it?
Sorry for this bad mood...
For the next 3 functions that are proposed:*isrow(), iscolumn() and
ismatrix()*, the
following features are discussed:
* case of [] :
The answer should be conventional: either the answer is %T for the
3 functions,
or it is %F for the 3.
Matlab answers look unconsistent. They are:
isrow([]) => 0
iscolumn([]) => 0 but
ismatrix([]) => 1
Could anyone explain how and why, while any other non-empty
column or row is detected as a matrix, [] is also claimed to be a
matrix()
but neither a row nor a column..
The present Scilab implementation gives:
isrow([]) => %F iscolumn([]) => %F but ismatrix([]) => %T
So, it is Matlab-compatible. It is likely its overal business.
* case of a scalar (says %pi):
Matlab returns:
isrow(pi) => 1
iscolumn(pi) => 1
ismatrix(pi) => 1
I definitely agree with Matlab, despite the Matlab-mania of Scilab is
weakening...:
isrow(%pi) => %F
iscolumn(%pi) => %F
ismatrix(%pi) => %F
* case of an hypermatrix with singleton dimension(s):
- Matlab returns always 0 (false) for any input hypermatrix, for
the 3 functions,
even when it has singleton dimension, say: ismatrix(rand(2,1,2))
=> 0
- This behaviour is debattable. Scilab could be more comprehensive
at no
expenses:
* Here are some suggested implementations (without overhead):
function r = ismatrix(A)
s = size(squeeze(A))
s = length(s(s>0))
r = s>0 & s<3
endfunction
giving:
ismatrix([]) // %F
ismatrix(%pi) // %T
ismatrix([1,1]) // %T
ismatrix([1;1]) // %T
ismatrix(rand(2,3)) // %T
ismatrix(rand(2,3,2)) // %F
ismatrix(rand(2,1,3)) // %T
function r = isrow(A)
s = size(A)
s2 = s(find(s(2:$)>=1))
r = s(1)==1 & (length(s2)==1 | prod(s2)==1)
endfunction
giving:
isrow([]) // %F
isrow(%pi) // %T
isrow([1,1]) // %T
isrow([1;1]) // %F
isrow(rand(2,3)) // %F
isrow(rand(1,3,2)) // %F
isrow(rand(1,1,3)) // %T
isrow(rand(2,1,1)) // %F
and finally:
function r = iscolumn(A)
s = size(A)
r = s(1)>=1 & length(find(s(2:$)>1))==0
endfunction
giving:
iscolumn([]) // %F
iscolumn(%pi) // %T
iscolumn([1,1]) // %F
iscolumn([1;1]) // %T
iscolumn(rand(2,3)) // %F
iscolumn(rand(1,1,3)) // %F
iscolumn(rand(3,1,1)) // %T
Comments of any forthcoming user would be very appreciable.
Hope to read them soon,
Regards
Samuel Gougeon
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.scilab.org/pipermail/dev/attachments/20130513/b68366fe/attachment.htm>
More information about the dev
mailing list