我是靠谱客的博主 甜美鸡,最近开发中收集的这篇文章主要介绍Matlab函数备忘2,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.sort(),sortrows()

#matlab code

sort(A)           默认升序,列优先
sort(A,'descend') 降序
sort(A,1)         对每一列中的元素升序排列
sort(A,2)         对每一行中的元素升序排列
[A_sort,idx] = sort(A)  A_sort表示排序后的结果,idx表示A_sort元素在A中的位置索引。A_sort(idx) = A
sortrows(A,n)     n:大于0,表示升序排列;n:小于0,表示降序排列。表示将第n列升序(降序排列),其他列跟着动。

%举两个例子:
data =
     1     3     2
     7     6     5
     4     9     8

sortrows(data,1)
ans =
     1     3     2
     4     9     8
     7     6     5
sortrows(data,-1)
ans =
     7     6     5
     4     9     8
     1     3     2

2.rand(),randn(),randperm(),randsample()

rand()
均匀分布的随机数或矩阵
语法
Y = rand(n)
Y = rand(m,n)
Y = rand([m n])
Y = rand(m,n,p,...)
Y = rand([m n p...])
Y = rand(size(A))
rand
s = rand('state')
描述
rand函数产生由在(0, 1)之间均匀分布的随机数组成的数组。
Y = rand(n) 返回一个n x n的随机矩阵。如果n不是数量,则返回错误信息。
Y = rand(m,n) 或 Y = rand([m n]) 返回一个m x n的随机矩阵。
Y = rand(m,n,p,...) 或 Y = rand([m n p...]) 产生随机数组。
Y = rand(size(A)) 返回一个和A有相同尺寸的随机矩阵。

1,rand(3)*-2   rand(3)是一个3*3的随机矩阵(数值范围在0~1之间)
然后就是每个数乘上-2

2 ,用matlab随机产生601365之间的正数   1+fix(365*rand(160));

3,用rand函数随机取100个从-11的数x1,x2,...,x = rand(1,100) * 2 - 1

randn()
说明:由于产生的是随机数序列,这里所说的均值为0,只是说这写随机数的分布期望值为0
而不是说这个序列的平均值就一定为0。
功能:产生标准正态分布的随机数或矩阵的函数。
用法:
Y = randn(n)
返回一个n*n的随机项的矩阵。如果n不是个数量,将返回错误信息。
Y = randn(m,n) 或 Y = randn([m n])
返回一个m*n的随机项矩阵。
Y = randn(m,n,p,...) 或 Y = randn([m n p...])
产生随机数组。
Y = randn(size(A))
返回一个和A有同样维数大小的随机数组。
randn
返回一个每次都变化的数量。

举个例子:
(1)产生均值为0.6,方差为0.1的一个5*5的随机数方式如下:
x = 0.6 + sqrt(0.1) * randn(5)
randperm()

函数功能:随机打乱一个数字序列。
语法格式:
y = randperm(n)
y是把1到n这些数随机打乱得到的一个数字序列。生成的数字不会重复。
y = randperm(n,k)
产生随机数,并返回前k个。

1、RANDPERM

根据Matlab文档,randperm最常用的用法是是返回一个从1-n的包含n个数的随机排列(每个数字只出现一次)——以行向量的形式.

如果希望从1-n的数字序列里面随机返回k个数,则可以使用

p = randperm(n,k)

其中,这k个数之间彼此也是不相同的。可见,randperm能够产生不重复的随机排列,结合原数据,可写成类似下面的形式:

new = old( randperm(  size(old,1)  ) , : );

这样新数组中的各行就被重排了。如果各列也需要重排,则可以嵌套使用。
Matlab文档中还说,randperm完成的是不重复的重排采样(k-permutations),如果结果中的数需要重复多次出现的情况,则可以用:

randi(n,1,k)



randperm和rand、randi、randn一样,其随机数的生成是收到rng命令控制的,因此,可通过该命令影响随机数据流rand stream的情况。
randsample()

randsample(n,k)和randperm(n,k)的功能一样,都是产生k个不相同的数(1-n)。
randsample(ARRAY,k),事实上就是randperm和原数组结合使用的形式,从ARRAY数组里面随机取出k个不相同的数。
replacement是一个bool变量,为1的时候,取出的数可能是重复的,为0的时候,可能不重复。

很显然,看到这里,会发现randsample和randperm很相似,譬如,之前旧数组随机排序的需求可写成下面的样式:

new = old( randsample( 1:length(matrix) , length(matrix) ,0),: );
or
new = randsample( old, length(old), 0 );   <-- I preferred this.


第四种情形,多出来一个w,是权重系数,能够根据此权重系数在原数组(或1-n数组)里面选出可能重复的k个数。典型用法譬如:

R = randsample('ACGT',48,true,[0.15 0.35 0.35 0.15])


上面的语句能够产生48个内容为ATCG的随机字串,且A出现的权重为0.15,其余类推。这个显然在生物信息学中很有用。ATCG也就是DNA的碱基序列。
第五种情形,可以用自己提供的随机数stream替换系统默认的随机数,s必须派生自Matlab的RandStream类。

小结

通过对比,我们很容易的发现randperm比randsample更直接更底层,而randsample则是对各种使用的情形进行了封装。randsample最有用的优势是可以很方便的实现随机数的权重分布。

3. 取整问题

1.fix()   结尾取整
2.round() 四舍五入
3.floor() 向下取整
4.ceil()  向上取整

最后

以上就是甜美鸡为你收集整理的Matlab函数备忘2的全部内容,希望文章能够帮你解决Matlab函数备忘2所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部