File: mtlb_sortrows.sci

package info (click to toggle)
scilab 5.2.2-9
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 334,832 kB
  • ctags: 52,586
  • sloc: xml: 526,945; ansic: 223,590; fortran: 163,080; java: 56,934; cpp: 33,840; tcl: 27,936; sh: 20,397; makefile: 9,908; ml: 9,451; perl: 1,323; cs: 614; lisp: 30
file content (73 lines) | stat: -rw-r--r-- 1,691 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
// Copyright (C) 2004-2006 - INRIA - Farid BELAHCENE 
// 
// This file must be used under the terms of the CeCILL.
// This source file is licensed as described in the file COPYING, which
// you should have received as part of this distribution.  The terms
// are also available at    
// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt

function varargout=mtlb_sortrows(varargin)
// Emulation function for sortrows() Matlab function

[lhs,rhs]=argn()

if rhs==1 then
	if type(varargin(1))==1 | type(varargin(1))==8 | type(varargin(1))==10 then
		[var1,index]=gsort(varargin(1),'lr','i')
	elseif type(varargin(1))==4 then 
		[var1,index]=gsort(bool2s(varargin(1)),'lr','i')
	end
	varargout(1)=var1
elseif rhs==2 then
	A=varargin(1)
	cls=varargin(2)
	indexlist=list((1:size(A,1))');
	
	if size(cls,2)>1 then
		error(msprintf(gettext("%s: Wrong type for input argument #%d: Column vector expected.\n"),"mtlb_sortrows",2))
	end

	if type(A)==10 then
		B=asciimat(A)
	elseif type(A)==4
		B=bool2s(A)
	elseif type(A)==1
		B=A
	end

	for i=size(cls,1):-1:1
		if cls(i)>0
			[M,indextemp]=gsort(B(:,cls(i)),'lr','i')
		else
			[M,indextemp]=gsort(B(:,abs(cls(i))),'lr','d')
		end
		for j=1:size(indextemp,1)
			Btemp(j,:)=B(indextemp(j),:)
		end
		B=Btemp
		indexlist($+1)=indextemp
	end
	
	index=indexlist($)
	if size(indexlist)>2 then
		indextemp=zeros(size(A,1),1)
		for i=size(indexlist)-1:-1:1
			indexlist1=indexlist(i)
			indextemp=indexlist1(index)
			index=indextemp
		end
	end
	
	if type(A)==10 then
		varargout(1)=asciimat(B)
	else
		varargout(1)=B
	end
end

if lhs==2 then
	varargout($+1)=index
end

endfunction