实验8_6_矩阵变换

任意给定一个n*n的矩阵,矩阵的行数与列数均为n。你的任务是通过行变换,使得矩阵每行元素的平均值按递增顺序排列。如果出现有的行平均值相同的情况,则按照原顺序输出。

输入格式:

共n+1行,第一行为一个整数n代表矩阵的行数(列数),n的范围是1—100。后边n行为n*n个整数,即此矩阵的元素。矩阵元素的绝对值不会超过1000000。

输出格式:

共n行,为经过行变换后的新矩阵。每行的每个元素用空格分隔,注意最后一个元素后为换行符。具体见样例。

输入样例:

3
5 5 5
3 3 3
1 1 1

输出样例:

1 1 1
3 3 3
5 5 5

来都来了点个关注呗(持续更新答案)

#include<stdio.h>
int main()
{
	int n;
	scanf("%d",&n);
	int a[n][n+1];
	int i,j,k;
	int x,y,sum;
	for(i=0;i<n;i++)
	{
		a[i][n]=0;
		for(j=0;j<n;j++)
		{
			scanf("%d",&a[i][j]);
			a[i][n]=a[i][n]+a[i][j];
		}
	}
	for(i=0;i<n-1;i++)
	{
		sum=a[i][n];
		y=i;
		for(j=i;j<n;j++)
		{
			if(sum>a[j][n])
			{
				sum=a[j][n];
				y=j;
			}
		}
		for(k=y;k>i;k--)
		{
			for(int l=0;l<=n;l++)
			{
				x=a[k][l];
	    		a[k][l]=a[k-1][l];
	    		a[k-1][l]=x;
			}
		}
	}
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			printf("%d",a[i][j]);
			if(j==n-1)
			printf("\n");
			else
			printf(" ");
		}
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
实验报告(例1) 课程名称: 模式识别 实验名称: KL变换实验 提交时间: 专业:计算机应用技术 年级: 2009级 姓名: "一、实验目的和要求 " "1. 掌握特征提取的基本方法。 " "2. 掌握基于KL变换的特征提取的方法。 " "3. 培养学生灵活使用KL变换进行模式识别的能力。 " "二、实验环境、内容和方法 " "环境:windows XP,matlab R2007a " " " "内容: " "给出ORL人脸数据库,共有400幅人脸图像(40人,每人10幅,大小为92*11" "2象素)。其中第一个人的图像如下图: " " " " " "选取数据库中的部分样本(每个人的前5张图片)作为训练样本,其余作为" "未知的测试样本。从训练样本中得到KL变换矩阵,然后对训练样本和测试 " "样本都进行变换,用变换后的数据作最近邻识别,距离可以为对应灰度值 " "之差的平方和,统计识别率。 " " " "方法:KL变换方法 " " " " " "三、实验过程描述 " "1.通过com_ReadDB函数读取每个人的前5幅图像,函数com_ReadDB " "返回TrainX和TrainClass。TrainX的每一行是每幅图像可以用按行或者按 " "列堆成一个=WidthHeight维向量。TrainClass是图像的识别信" "息。 " "2.求均值m,构造矩阵 " "3.计算: " "4.计算:[V,D] = eig(R); " "5.计算: " "6.按特征值从大到小排序,选择前几个最大的特征值对应的Ui作为变换矩" "阵W。 " "7.把所有训练样本做变换y=Wtx,保留系数y。 " "8.再读取每个人的后5幅图像作测试。 " "9.对新样本也作变换,看与哪个y最接近。 " "10.把比较成功识别的图像进行计数。最后统计识别率。 " " " "四、结果分析 " "通过取不同的前N个最大特征向量,如最大的10个表示为190:200,得到如" "下识别率的数据: " "190:200 识别率为: 0.9100 " "180:200 识别率为: 0.9350 " "170:200 识别率为: 0.9450 " "160:200 识别率为: 0.9500 " "150:200 识别率为: 0.9450 " "140:200 识别率为: 0.9500 " "130:200 识别率为: 0.9400 " "120:200 识别率为: 0.9500 " "110:200 识别率为: 0.9450 " "100:200 识别率为: 0.9450 " "50:200 识别率为: 0.9500 " "20:200 识别率为: 0.9600 " "1:200 识别率为: 0.9600 " "当最大特征向量达到30个以后识别率已经固定在0.9450。再增加提高已经 " "不大。 " " " "在实验过程中曾遇到cell类型的比较问题。由于没有现成的cell类型,只 " "能通过cell转换成别的类型进行比较。解决办法是用一个变量C=cell{n,m}" ",n,m表示cell中的第n行,m列的元素。C的类型取决与cell{n,m}中的类型 " "。 " " " "五、附录代码 " "[TrainX,TrainClass] = com_ReadDB('D:\模式识别\ORL\','1,2,3,4,5');" " " "m=mean(TrainX,2); " "Q=[]; " "for i=1:200 " "Q=[Q TrainX(:,i)-m]; " "end " "R=Q'*Q; " "[V,D] = eig(R); " "U=Q*V*D^(-0.5); " "W=U(:,150:200); " "Ty=W' * TrainX; " "[TrainX1,TrainClass1] = " "com_ReadDB('D:\模式识别\ORL\','6,7,8,9,10'); " "Ty1=W' * TrainX1; " "compare=0; " "for j=1:200 " "for i=1:200 " "a(i) =norm(Ty(:,i)-Ty1(:,j),2); " "end " "min=a(1); " "order=1; " "for i=2:200 " "if a(i)<min " "min=a(i); " "order=i; " "end " "end " "ju1=TrainClass(order,1); " "ju2=TrainClass1(j,1); " "if ju1{1}==ju2{1} " "compare=compare+1; " "end " "end " "disp('成功识别率为:');disp(compar

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆呆水獭_(:_」∠)_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值