首页 > 编程知识 正文

matlab中矩阵的转置,matlab矩阵函数

时间:2023-05-03 15:23:33 阅读:114357 作者:3119

正如help文档第一句中所述,可以在sort中按升序或降序排列参数元素~

格式:

b=sort(a ) %沿着输入参数

按a不同维度的方向、从小到大的顺序对a中的元素进行排序。 a可以是字符串、实数和复数的单元格数组。 对于a中完全相同的元素,按它们在a中

的优先顺序排在一起; a为复数时,按元素振幅从小到大的顺序排列,有振幅相同的复数元素时,按它们进行区间[-,

]的宽度角从小到大依次排列; 如果a中有NaN的元素,则将它们排列到最后。 如果

如果a是向量,则返回从小到大的向量,如果a是二维矩阵,则按照列的朝向排列; 在a为多维数组的情况下,sort(a )将沿着第一非单位集合的要素像向量一样进行处理。

b=sort(a,dim ) %在矩阵a中指定的维数dim的方向上重新排列a的元素。

[B,IX]=sort(a;

%其中,IX是大小等于size(a )的数组,每列是与a列向量的元素相对应的替换位置标记。

范例: a=[335]

0 )2);

sort(a,1 ) %纵向排列

ans=

032

345

sort(a,2 ) %横向排列

ans=

335

024

A=[-1.9,- 0.2,3.1415926,5.6,

7.0,2.4 ) 3.6I );

[B1,index]=sort(a )。

计算结果如下。

B1=

Columns 1 through 4

- 0.2000-1.90003.14162.40003.6000 I

Columns 5 through 6

5.60007.0000

索引

=

213645

因此,在a与其他矩阵c(char或cell )一对一对应的情况下,[B1,INDEX]=

sort(a )在对a进行排序后,取得索引INDEX,还可以询问B1的各个要素对应于c中的哪个。

------------- -请参阅

要在Matlab中对一维向量进行排序,请使用sort函数: sort(a )。 排序按升序进行。 其中,a是排序对象的向量。 要保留数组前的索引,请使用

[sA,index]=sort(a ) ]

、排序后,sA是已排序的向量,index是向量sA相对于a的索引。 索引允许数组的逆运算。

我忘了有没有用Matlab。

其实,这里a

sa (索引)表示,

[甜蜜的凉面等于sa(index ) ]的结论确实奇怪而有用。 请不要相信顺序,尝试输入命令sa(index )

,看看得到的是不是排列前的a。 [鸿1018问了这个问题,在此补上] 2008-10-20 13:18

如果对一般矩阵an*m(n,m都大于或等于2 )修改索引值,那么结论sa (索引) a仍然成立,修改代码如下: s=size(A ) a;

fork=1:s(2) )

索引(:k )=索引(:k ) ) k-1 ) *s ) 1;

结束

------------- -请参阅

如果要对作为Matlab的向量(一维)进行排序,可以使用sort )。 这里,a是排序对象的矢量,如果只是为了对a进行排序,则直接使用sort ) a )即可,

如果排序后仍需要保留原始索引,则可以使用返回值,即[B,ind]=sort(a )。 计算后,b是a排序后的向量,a保持不变,ind是b的各项与a对应

中项索引。 排序jpdgtx按升序进行。

在Matlab中,访问矩阵中的元素,并一维地通过a(1)访问向量a的第一元素; (下标从1开始)用a (1,2 )二维访问a的第1行、第2列的要素。

在sort函数的结果中,jpdgtx按升序排序,因此要按降序转换,首先要用x=eye(n )生成n维单位数组,然后用X=rot90(X ) x将其旋转到下一个对角线单位数组,再用x乘以原始矩阵例如,a逆序排列采取以下步骤。

x=eye(size ) a );

x=rot90(x;

A=A*X;

假设a是2*n的矩阵,即两行。

b=a(1, );

[c,pos]=sort(b; %pos为排序后的下标,c为第1行的排序结果;

a (2, ) ) a ) 2,pos ); 第%2行对应于第一行中排序的下标

a(1,:)=c;%第一行结果重新赋给a 的第一行

以下适用于m*n的矩阵按第一行排序

[ b, pos ] = sort( a( 1, : ) );

a = a( :, pos );

------------------------------------------------

主要是前一篇在实现几种编码的时候遇到了好些问题。

1.元胞数组

因为要生成各个符号的码字,他们的长度都不一样,

没法用一般的矩阵来存。

c = cell(5,2)

c{1,1} = 1

反正用cell创建,用{}引用就是了。

另外,把若干字符串连接成一个元胞数组:

strvcat('Hello','Yes')

(特别鸣谢yhsa678同学的指点)

2.for循环

matlab的for让人觉得很不爽。

c:

for ( i = 1 ; i <= n ; i ++ ){...}

vb:

for i = 1 to n

...

next i

pascal:

for i := 1 to n begin

...

end

以上的东西执行完后,i的值都是n+1

但是,matlab的for i = 1:n完了之后!

i == n

。。。这在平时真的没啥。。但在有的时候,就要增加点编码了,很烦。

比如这个例子:

我们要寻找数组中有没有0。有0就干什么事,没有就干什么事。

x = [1 3 2] ;

for i = 1:3

if x(i) ==

0

break ;

end

end

这个完了之后,如果i==3,

那么你就无法确定是因为3好元素是0,break掉的。

还是循环执行完了,i停在3的。

所以相比前几种语言来说,这个设计实在是不爽。。

只有多加点东西:

x = [1 3 2] ;

has0 = 0 ;

for i = 1:3

if x(i) ==

0

has0 = 1

break ;

end

end

if has0

..

else

..

end

3.sort

第一个就是,sort是从小到大,那么从大到小就有点囧了。

可以用逆置数组的办法来完成:

p = sort(p)

p = fliplr(p)

这下就是从大到小了。

fliplr是左右逆置。

还有个flipud是上下逆置。

第二个就是,sort的返回值确实很有用处,当年还不会matlab的时候在这里看到过。

今天做编码的时候,有两个要先从大到小排序再处理。

但是处理完之后交回调用者的码字应该是按照原顺序排的。

这个时候,就好利用sort的返回值了。

>> x = [ 3 1 2]

x =

3 1 2

>> [y i] = sort(x)

y =

1 2 3

i =

2 3 1

执行完后,有这个关系:y = x(i)

比如,调用这要求得到的c是对应于以前的x的。

但我们处理的时候,是基于排序后的y的。那么这时得到的c。应该做个处理:

c(i) = c ;

这下就OK了。

------------------------------------------------------

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。