如何matlab创建三维矩阵一个16×16的矩阵 0-255

Matlab 如何向矩阵中插入另一个矩阵及创建一个矩阵?1、假设有一个10×10的矩阵A,现在要将5×5的矩阵B插入到A中,规定插入位置为第3行,第2列,Matlab命令应该怎样写?2、创建一个矩阵A,使得它是B 0 0 B ——B是一个已知矩阵,命令又应怎样写?
1.A=zeros(10,10);%比如说初始的AB=ones(5,5);%初始的BA(3:7,2:6)=B;2.B=ones(5,5);%初始的B[m,n]=size(B);A=zeros(2*m,2*n);A(1:m,1:n)=B;A(1+m:end,1+n:end)=B;
为您推荐:
其他类似问题
扫描下载二维码考虑二阶矩阵,元素为0或1,有16个这样的矩阵,按照相似将16个矩阵分组写出有什么简单的办法可以判断两个二阶矩阵是否相似吗
设二阶矩阵A={{a,b},{c,d}},则它的特征多项式为x^2-(a+d)x+(ad-bc),考虑a,b,c,d的取值,知道共有6种可能x^2(三个矩阵)、x^2-1(一个矩阵)、x^2-x(六个矩阵)、x^2-x-1(两个矩阵)、x^2-2x(一个矩阵)、x^2-2x+1(三个矩阵).若特征多项式无重根,则对应的矩阵两两相似,如以x^2-x为特征多项式的六个矩阵{{1,1},{0,0}},{{1,0},{1,0}},{{0,0},{1,1}},{{0,1},{0,1}},{{1,0},{0,0}},{{0,0},{0,1}}两两相似属于一类.这里要特别注意有重根的情况.以x^2为特征多项式的矩阵中{{0,0},{1,0}}和{{0,1},{0,0}}的最小多项式为x^2,而{{0,0},{0,0}}的最小多项式是x,所以这里有两类.还有以x^2-2x+1为特征多项式的三个矩阵也分两类.
为您推荐:
其他类似问题
二阶矩阵是否相似吗
扫描下载二维码如何创建一个16×16的矩阵 0-255_百度知道
如何创建一个16×16的矩阵 0-255
如何创建一个16×16的矩阵 0-255
就将正中间的那个空空出来因16×16=256>255,所以为了矩阵的对称性,但256只比255大一个数
来自团队:
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁OpenCV矩阵运算&.
一、矩阵Mat
I,img,I1,I2,dst,A,B;
1.加法I=I1+I2;//等同add(I1,I2,I);
add(I1,I2,dst,mask,dtype);
scaleAdd(I1,scale,I2,dst);//dst=scale*I1+I2;
2.减法absdiff(I1,I2,I);//I=|I1-I2|;
A-B;A-s;s-A;-A;
subtract(I1,I2,dst);
3.乘法I=I.mul(I);//点乘,I.mul(I,3);--&I=3*I.^2
Mat C=A.mul(5/B);//==divide(A,B,C,5);
A*B;矩阵相乘
I=alpha*I;
Mat::cross(Mat);//三维向量(或矩阵)的叉乘,A.cross(B)
double Mat::dot(Mat);//2个向量(或矩阵)的点乘的结果,A.dot(B)
mul-------multiply
pow(src,double p,dst);//如果p是整数dst(I)=src(I)^p;其他|src(I)|^p
4.除法divide(I1,I2,dst,scale,int
dtype=-1);//dst=saturate_cast(I1*scale/I2);
A/B;alpha/A;都是点除
5.转换I.convertTo(I1,CV_32F);//类型转换
A.t();//转置
flip(I,dst,int
flipCode);//flipCode=0是上下翻转,&0时左右翻转,&0时一起来
sqrt(I,dst);
cvtColor(I,dst,int code,int dstCn=0);
resize:对图像进行形变
--------------------------------------------------------------------------
6.其他Scalar s=sum(I);各通道求和
norm,countNonZero,trace,determinant,repeat都是返回Mat或者Scalar
countNonZero:用来统计非零的向量个数.(rows*cols个)
Scalar m=mean(I);//各通道求平均
Mat RowClone=C.row(1).clone();//复制第2行
addWeight(I1,alpha,I2,beta,gamma,dst,int
dtype=-1);//dst=saturate(alpha*I1+beta*I2+gamma);dtype是dst的深度
----------------------------------------------------------------------------
7.运算符log10()
exp(I,dst);//dst=exp(I);计算每个数组元素的指数
log(I,dst);//如果Iij!=0;则dstij=log(|Iij|)
randu(I,Scalar::all(0),Scalar::all(255));
Mat::t()转置
Mat::inv(int
method=DECOMP_LU)求逆。method=DECOMP_CHOLESKY(专门用于对称,速度是LU的2倍),DECOMP_SVD//A.inv();A.inv()*B;
invert(I1,dst,int method=DECOMP_LU);//用法同上
MatExpr abs(Mat)//求绝对值
A cmpop B;Aalpha cmpop
A;这里cmpop表示&,&=,==,!=,&=,&等,结果是CV_8UC1的mask的0或255
按位运算:A logicop B;As logicop
A;~A;这里logicop代表&,|,^
bitwise_not(I,dst,mask);//inverts所有的队列
还有bitwise_and,bitwise_or,bitwise_xor,
min(A,B);min(A,alpha);max(A,B);max(A,alpha);都返回MatExpr,返回的dst和A的类型一样
double determinant(Mat);//行列式
bool eigen(I1,dst,int lowindex=-1,int highindex=-1);//
bool eigen(I1,dst,I,int...);//得到特征值向量dst和对应特征值的特征向量
minMaxLoc(I1,&minVal,&maxVal,Point *minLoc=0,Point*
MaxLoc=0,mask);
//minLoc是2D时距原点最小的点(未考证)
------------------------------------------------------------------------------
8.初始化Mat
I(img,Rect(10,10,100,100));//用一块地方初始化。
Mat I=img(Range:all(),Range(1,3));//所有行,1~3列
Mat I=img.clone();//完全复制
img.copyTo(I);//传递矩阵头
I(2,2,CV_8UC3,Scalar(0,0,255));//I=[0,0,255,0,0,255;0,0,255,0,0,255];
Mat E=Mat::eye(4,4,CV_64F);//对角矩阵
Mat O=Mat::ones(2,2,CV_32F);//全一矩阵
Mat Z=Mat::zeros(3,3,CV_8UC1);//全零矩阵
Mat C=(Mat_(2,2)&&0,-1,2,3);//如果是简单矩阵的初始化
Mat::row(i);Mat::row(j);Mat::rowRange(start,end);Mat::colRange(start,end);都只是创建个头
Mat::diag(int d);d=0是是主对角线,d=1是比主低的对角线,d=-1....
static Mat Mat::diag(const Mat& matD)
Mat::setTo(Scalar &s);以s初始化矩阵
Mat::push_back(Mat);在原来的Mat的最后一行后再加几行
Mat::pop_back(size_t nelems=1);//移出最下面几行
-------------------------------------------------------------------------------
9.矩阵读取和修改(1)1个通道:
for(int i=0;i
for(int j=0;j
I.at(i,j)=k;
(2)3个通道:
Mat_ _I=I;//他没有4个通道寸,只有3个通道!
for(int i=0;i
for(int j=0;j
_I(i,j)[0]=b;
_I(i,j)[1]=g;
_I(i,j)[2]=r;
------------------------------------------------------------
或者直接用I.at(i,j)[0]....
-------------------------------------------------
{s=proImg.ptr(i);
{a1=s[3*j+1]-m1;
a2=s[3*j+2]-m2;}}
-------------------------------------------------------------------------
(3)其他机制
I.rows(0).setTo(Scalar(0));//把第一行清零
saturate_cast(...);//可以确保内容为0~255的整数
Mat::total();返回一共的元素数量
Mat::elemSize();返回元素的大小:CV_16SC3--&3*sizeof(short)--&6
Mat::elemSize1();返回元素一个通道的大小CV_16SC3--&sizeof(short)--&2
int Mat::type()返回他的类型CV_16SC3之类
int Mat::depth()返回深度:CV_16SC3--&CV_16S
int Mat::channels()返回通道数
size_t Mat:step1()返回一个被elemSize1()除以过的step
Size Mat::size()返回Size(cols,rows);如果大于2维,则返回(-1,-1),都是先宽再高的
bool Mat::empty()如果没有元素返回1,即Mat::total()==0或者Mat::data==NULL
uchar *Mat::ptr(int i=0)指向第i行
Mat::at(int i)(int i,int j)(Point pt)(int i,int j,int k)
RNG随机类:next,float RNG::uniform(float a,float b);..
double RNG::gaussian(double sigma);
RNG::fill(I,int distType,Mat low,Mat up);//用随机数填充
randu(I,low,high);
randn(I,Mat mean,Mat stddev);
reduce(I,dst,int dim,int reduceOp,int
dtype=-1);//可以统计每行或每列的最大、最小、平均值、和
setIdentity(dst,Scalar &value=Scalar(1));//把对角线替换为value
//效果等同:Mat A=Mat::eye(4,3,CV_32F)*5;
--------------------------------------------------------------
10.较复杂运算gemm(I1,I2,alpha,I3,beta,dst,int
flags=0);//I1至少是浮点型,I2同I1,flags用来转置
//gemm(I1,I2,alpha,I3,beta,dst,GEMM_1_T,GEMM_3_T);--&dst=alpha*I1.t()*I2+beta*I3.t();可用此完全代替此函数
mulTransposed(I,dst,bool aTa,Mat delta=noArray(),double scale=1,int
rtype=-1);
//I是1通道的,和gemm不同,他可用于任何类型。
//如果aTa=flase时,dst=scale*(I-delta).t()*(I-delta);
//如果是true,dst=scale*(I-delta)(I-delta).t();
calcCovarMatrix(Mat,int,Mat,Mat,int,int=);calcCovarMatrix(Mat I,Mat
covar,Mat mean,int flags,int=);
cartToPolar//转到极坐标
compare(I1,I2,dst,cmpop);cmpop=CMP_EQ,CMP_GT,CMP_GE,CMP_LT,CMP_LE,COM_NE
completeSymm(M,bool
lowerToUpper=false);当lowerToUpper=true时Mij=Mji(ij)
变成可显示图像:convertScaleAbs(I,dst,alpha,beta);dst=saturate_cast(|alpha*I+beta|);
dct(I,dst,int
flags=0);//DCT变换,1维、2维的矩阵;flags=DCT_INVERSE,DCT_ROWS
idct,dft,idft
inRange(I1,I_low,I_up,dst);//dst是CV_8UC1,在2者之间就是255
Mahalanobis(vec1,vec2,covar);
merge(vector,Mat);//把多个Mat组合成一个和split相反
double norm(...):当src2木有时,norm可以计算出最长向量、向量距离和、向量距离和的算术平方根
solveCubic解3次方程,solvePoly解n次方程
排列:sort,sortIdx
mixChannels();对某个通道进行各种传递
-----------------------------------------------------------------
11.未懂的函数getConvertElem,extractImageCOI,LUT
magnitude(x,y,dst);//I1,I2都是1维向量,dst=sqrt(x(I)^2+y(I)^2);
meanStdDev,
MulSpectrums(I1,I2,dst,flags);傅里叶
normalize(I,dst,alpha,beta,int normType=NORM_L2,int
rtype=-1,mask);//归一化
PCA,SVD,solve,transform,transpose
二、其他数据结构Point2f P(5,1);
Point3f P3f(2,6,7);
v;v.push_back((float)CV_PI);v.push_back(2);v.push_back(3.01f);//不断入
vector vPoints(20);//一次定义20个
三、常用方法Mat mask=src&0;这样很快建立一个mask了
四、以后可能用到的函数randShuffle,repeat
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。& & & & & & & &本博客所有文章分类的总目录:&
开源Math.NET基础数学类库使用总目录:
  上个月对Math.NET的基本使用进行了介绍,主要内容有矩阵,向量的相关操作,解析数据格式,数值积分,数据统计,相关函数,求解线性方程组以及随机数发生器的相关内容。这个月接着深入发掘Math.NET的各种功能,并对源代码进行分析,使得大家可以尽可能的使用Math.NET在.NET平台下轻易的开发数学计算相关的,或者可以将其中的源码快速移植到自己的系统中去(有时候并不需要所有的功能,只需要其中的部分功能代码),今天要介绍的是Math.NET中利用C#计算矩阵秩的功能。
  本文原文地址:
1.什么是矩阵秩
  矩阵的秩是反映矩阵固有特性的一个重要概念。在线性代数中,一个矩阵A的列秩是A的线性无关的纵列的极大数目。类似地,行秩是A的线性无关的横行的极大数目。矩阵的列秩和行秩总是相等的,因此它们可以简单地称作矩阵A的秩。通常表示为r(A),rk(A)或rank A。矩阵的行秩与列秩相等,是线性代数基本定理的重要组成部分. 其基本证明思路是,矩阵可以看作线性映射的变换矩阵,列秩为像空间的维度,行秩为非零原像空间的维度,因此列秩与行秩相等,即像空间的维度与非零原像空间的维度相等(这里的非零原像空间是指约去了零空间后的商空间:原像空间)。这从矩阵的奇异值分解就可以看出来。矩阵秩的计算最容易的方式是高斯消去法,这里引用维基百科的内容:
  计算矩阵A的秩的最容易的方式是高斯消去法,即利用矩阵的初等变换生成一个行阶梯型矩阵,由于矩阵的初等变换不改变矩阵的秩,因此A的行梯阵形式有同A一样的秩。经过初等变换的矩阵的非零行的数目就是原矩阵的秩。例如考虑4 & 4矩阵:
我们看到第2纵列是第1纵列的两倍,而第4纵列等于第1和第3纵列的总和。第1和第3纵列是线性无关的,所以A的秩是2。这可以用高斯算法验证。它生成下列A的行梯阵形式:
  它有两个非零的横行。在应用在计算机上的浮点数的时候,基本高斯消去(LU分解)可能是不稳定的,应当使用秩启示(revealing)分解。一个有效的替代者是奇异值分解(SVD),但还有更少代价的选择,比如有支点(pivoting)的QR分解,它也比高斯消去在数值上更强壮。秩的数值判定要求对一个值比如来自SVD的一个奇异值是否为零的依据,实际选择依赖于矩阵和应用二者。
  矩阵秩在线性代数中的应用还是很广的,如计算线性方程组的解的数目等,下面就看一下Math.NET中对该过程的计算实现以及如何调用的例子。
2.Math.NET矩阵秩计算的实现
  Math.NET在对矩阵秩的计算过程中,和行列式的实现方式非常相似,也是把其作为矩阵计算的一个小部分功能,作为属性添加在各个矩阵分解算法的抽象和实现类中,看一下其中一个Svd分解算法抽象,由于计算简单,已经直接实现了秩的计算,继承类可以直接使用,就够了,其他的使用下面也和行列式类似。
1 internal abstract class Svd : Svd&float&
protected Svd(Vector&float& s, Matrix&float& u, Matrix&float& vt, bool vectorsComputed)
: base(s, u, vt, vectorsComputed) { }
/// &summary&计算矩阵秩&/summary&
/// &value&The number of non-negligible singular values.&/value&
public override int Rank
return S.Count(t =& !Math.Abs(t).AlmostEqual(0.0f));
public override double L2Norm
get{return Math.Abs(S[0]);}
public override float ConditionNumber
var tmp = Math.Min(U.RowCount, VT.ColumnCount) - 1;
return Math.Abs(S[0]) / Math.Abs(S[tmp]);
/// &summary&计算行列式 &/summary&
public override float Determinant
if (U.RowCount != VT.ColumnCount)
throw new ArgumentException(Resources.ArgumentMatrixSquare);
var det = 1.0;
foreach (var value in S)
if (Math.Abs(value).AlmostEqual(0.0f))
return Convert.ToSingle(Math.Abs(det));
3.Math.NET计算矩阵秩的代码
  上述过程和原理只是便于大家理解其实现过程,下面简单演示一下在Math.NET中计算矩阵秩的过程,就是直接调用计算即可。
1 // 格式设置
2 var formatProvider = (CultureInfo)CultureInfo.InvariantCulture.Clone();
3 formatProvider.TextInfo.ListSeparator = " ";
5 //创建一个随机的矩阵
6 var matrix = new DenseMatrix(5);
7 var rnd = new Random(1);
8 for (var i = 0; i & matrix.RowC i++)
for (var j = 0; j & matrix.ColumnC j++)
matrix[i, j] = rnd.NextDouble();
16 Console.WriteLine(@"Initial matrix");
17 Console.WriteLine(matrix.ToString("#0.00\t", formatProvider));
18 Console.WriteLine();
19 //1. 秩
20 Console.WriteLine(@"矩阵秩计算结果为:");
21 Console.WriteLine(matrix.Rank());
22 Console.WriteLine();
结果如下:
1 Initial matrix
2 DenseMatrix 5x5-Double
10 矩阵秩计算结果为:
  包括源代码以及案例都可以去官网下载,下载地址本系列文章的目录中第一篇文章:,有介绍。由于源码很大,如果找不到相应的案例,可以进行搜索,可以比较快的找到相应的代码。
阅读(...) 评论()}

我要回帖

更多关于 matlab 创建矩阵 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信