精华内容
下载资源
问答
  • 用于在不使用 for 循环的情况下对矩阵中的每个对角线(或反对角线)求和的高效且紧凑的代码。 适用于大型矩阵。 对于 3D 矩阵输入 A,A(:,:,k) 的对角线总和在sumMat(:,k)。 当 A 是 3D 时,脚本通常比基于 for 循环...
  • 高效且紧凑的代码,用于在不使用 for 循环的情况下获取 2D 矩阵中每个对角线(或反对角线)的平均值。 适用于大型矩阵,尤其适用于高矩阵或宽矩阵。 请注意,使用 diag() 函数的 for 循环实现可能更快,并且在应用...
  • 【面试题】将矩阵反对角线输出

    千次阅读 2018-08-24 20:12:31
    矩阵: [[1,2,3,4,5],  [6,7,8,9,10], [11,12,13,14,15]]; 输出:5 4 10 3 9 15 2 8 14 1 7 13 6 12 11  1.先打印对角线右上角,包括对角线 2.再打印对角线左下角。 public class PrintMatrix { ... ...

    矩阵:

    [[1,2,3,4,5],
     [6,7,8,9,10],
    [11,12,13,14,15]];

    输出:5 4 10 3 9 15 2 8 14 1 7 13 6 12 11 

    1.先打印对角线右上角,包括对角线

    2.再打印对角线左下角。

    public class PrintMatrix {
    
    	public static void main(String[] args) {
    		int[][] a = { { 1, 2, 3, 4, 5 }, 
    				{ 6, 7, 8, 9, 10 }, 
    				{ 11, 12, 13, 14, 15 } };
    
    		print(a);
    	}
    
    	public static void print(int[][] arr) {
    
    		int row = arr.length;
    		int col = arr[0].length;
    		int m = 0, n = 0;
    		// 打印对角线右上角(包括对角线)
    		for (int j = col - 1; j >= 0; j--) {
    			m = 0;
    			n = j;
    			while (m < row && n < col) {
    				System.out.print(arr[m][n] + " ");
    				m++;
    				n++;
    			}
    		}
    		// 打印对角线左下角
    		for (int i = 1; i < row; i++) {
    			m = i;
    			n = 0;
    			while (m < row && n < col - 1) {
    				System.out.print(arr[m][n] + " ");
    				m++;
    				n++;
    			}
    		}
    	}
    }
    

     

    展开全文
  • 处理的目的如下图,总结成一句话就是对一个非方阵的不规则矩阵进行反对角线相加的处理,从而得到一个一维数组的数据。联想到matlab可以直接导入excel得到矩阵的优势,我决定用matlab来解决这个问题(当然python之类...

    问题描述

    昨晚被我姐安排了一个小活,她需要对实验数据进行处理,但是苦于没有相关技能,就向我们求助了。处理的目的如下图,总结成一句话就是对一个非方阵的不规则矩阵进行反对角线相加的处理,从而得到一个一维数组的数据。联想到matlab可以直接导入excel得到矩阵的优势,我决定用matlab来解决这个问题(当然python之类的或许会有更简单的办法)
    在这里插入图片描述

    解决方案

    话不多说,先上代码

    // An highlighted block
    %修改i_max和j_max,分别为矩阵的行列数
    i_max=24;
    j_max=28;
    i=1;
    j=1;
    m=2;
    k=1;
    X=i_max+j_max;
    a=zeros(X-1,1);
    
    while m<=X
       for i=1:1:m
        j=m-i;
            if i<=i_max && j<=j_max && j~=0
                a(k)=a(k)+C(i,j);
            else
            end
       end
                 m=m+1; 
                 k=k+1;
                 i=1;
        
    end
    

    这个问题解决思路很简单,将excel表格导入工作区后,即可以得到一个矩阵C,接下来的问题就是找出每个斜对角线的元素将他们相加即可。
    在这里我的解决方案如下:
    可以看出每条反对角线元素的行列标号和是相同的,且依次递增,再对标号进行判定,去掉不在矩阵中的数值,将这些值相加存入数组中就完成了。

    展开全文
  • 使用numpy包生成反对角线上全为1的矩阵

    千次阅读 热门讨论 2020-12-31 04:45:38
    前几天突然有了一个想法,就是numpy包中有很多函数可以用来生成对角矩阵,然而有没有办法能够生成反对角矩阵呢?虽然我们知道生成反对角矩阵在数学上是没有意义的,例如:反对角全为1的矩阵实际上只与主对角线上全为...

    前几天突然有了一个想法,就是numpy包中有很多函数可以用来生成对角矩阵,然而有没有办法能够生成反对角矩阵呢?虽然我们知道生成反对角矩阵在数学上是没有意义的,例如:反对角全为1的矩阵实际上只与主对角线上全为1的矩阵相差一个负号。然而只是单纯的好奇,就研究了一下,这里给出解答。

    import numpy as np
    
    
    class Debug:
        @staticmethod
        def mainProgram():
            x = np.eye(3)
            print("主对角线全为1的矩阵")
            print(x)
            for line in x:
                length = len(x)
                for i in range(int(length / 2)):
                    line[i], line[length - 1 - i] = line[length - 1 - i], line[i]
            print("反对角线全为1的矩阵")
            print(x)
    
    
    if __name__ == '__main__':
        debug = Debug()
        debug.mainProgram()
    """
    主对角线全为1的矩阵
    [[1. 0. 0.]
     [0. 1. 0.]
     [0. 0. 1.]]
    反对角线全为1的矩阵
    [[0. 0. 1.]
     [0. 1. 0.]
     [1. 0. 0.]]
    """
    
    

    至此,我们看到,成功生成了反对角线上全为1的矩阵。(BTW: 没有难度,我能打十个,哈哈哈)

    如果大家觉得有用,请高抬贵手给一个赞让我上推荐让更多的人看到吧~

    展开全文
  • printf("主对角线的和是:%d\n反对角线的和是:%d\n主对角线之和和反对角之和的总和是:%d\n",sum1,sum2,sum); return 0; } 在VS2019下,需将源文件的scanf改为scanf_s: #include int main() { int i, j, n, sum1 = ...

    法一:

    #include<stdio.h>
    
    int main()
    {
    	int i,j,n,sum1=0,sum2=0,sum=0;
    	int a[20][20];
    	
    	printf("请输入你想设置的矩阵的大小N(0=<N<=20):");
    	scanf("%d",&n);
    	
    	printf("请输入此时N*N的整数矩阵a[N][N]的内容(0=<N<=20)\n");
    	for(i=0;i<n;i++)
    	{
    		for(j=0;j<n;j++)
    		{
    			scanf("%d",&a[i][j]);
    		}
    	}
    	
    	if(n%2==0)
    	{
    		for(i=0;i<n;i++)
    		{
    			for(j=0;j<n;j++)
    			{
    				if(i==j)
    					sum1+=a[i][j];
    				if(j==n-i-1)
    					sum2+=a[i][j];
    			}
    		}
    		sum=sum1+sum2;
    	}
    	else
    	{
    		for(i=0;i<n;i++)
    		{
    			for(j=0;j<n;j++)
    			{
    				if(i==j)
    					sum1+=a[i][j];
    				if(j==n-i-1)
    					sum2+=a[i][j];
    			}
    		}
    		sum=sum1+sum2-a[i/2][j/2];
    	}
    	
    	printf("主对角线的和是:%d\n反对角线的和是:%d\n主对角线之和和反对角之和的总和是:%d\n",sum1,sum2,sum);
    	return 0;
    }
    

    在VS2019下,需将源文件的scanf改为scanf_s:

    #include<stdio.h>
    
    int main()
    {
    	int i, j, n, sum1 = 0, sum2 = 0, sum = 0;
    	int a[20][20];
    
    	printf("请输入你想设置的矩阵的大小N(0=<N<=20):");
    	scanf_s("%d", &n);
    
    	printf("请输入此时N*N的整数矩阵a[N][N]的内容(0=<N<=20)\n");
    	for (i = 0; i < n; i++)
    	{
    		for (j = 0; j < n; j++)
    		{
    			scanf_s("%d", &a[i][j]);
    		}
    	}
    
    	if (n % 2 == 0)
    	{
    		for (i = 0; i < n; i++)
    		{
    			for (j = 0; j < n; j++)
    			{
    				if (i == j)
    					sum1 += a[i][j];
    				if (j == n - i - 1)
    					sum2 += a[i][j];
    			}
    		}
    		sum = sum1 + sum2;
    	}
    	else
    	{
    		for (i = 0; i < n; i++)
    		{
    			for (j = 0; j < n; j++)
    			{
    				if (i == j)
    					sum1 += a[i][j];
    				if (j == n - i - 1)
    					sum2 += a[i][j];
    			}
    		}
    		sum = sum1 + sum2 - a[i / 2][j / 2];
    	}
    
    	printf("主对角线的和是:%d\n反对角线的和是:%d\n主对角线之和和反对角之和的总和是:%d\n", sum1, sum2, sum);
    	return 0;
    }
    

    法二:

    #include<stdio.h>
    
    int main()
    {
    	int i,j,n,sum1=0,sum2=0,sum=0;
    	int a[20][20];
    	
    	printf("请输入你想设置的矩阵的大小N(0=<N<=20):");
    	scanf("%d",&n);
    	
    	printf("请输入此时N*N的整数矩阵a[N][N]的内容(0=<N<=20)\n");
    	for(i=0;i<n;i++)
    	{
    		for(j=0;j<n;j++)
    		{
    			scanf("%d",&a[i][j]);
    		}
    	}
    	
    	if(n%2==0)
    	{
    		for(i=0;i<n;i++)
    		{
    			sum1+=a[i][i];
    			sum2+=a[i][n-i-1];
    		}
    		sum=sum1+sum2;
    	}
    	else
    	{
    		for(i=0;i<n;i++)
    		{
    			sum1+=a[i][i];
    			sum2+=a[i][n-i-1];
    		}
    		sum=sum1+sum2-a[i/2][i/2];
    	}
    	
    	printf("主对角线的和是:%d\n反对角线的和是:%d\n主对角线之和和反对角之和的总和是:%d\n",sum1,sum2,sum);
    	return 0;
    }
    

    在VS2019下,需将源文件的scanf改为scanf_s:

    #include<stdio.h>
    
    int main()
    {
    	int i, j, n, sum1 = 0, sum2 = 0, sum = 0;
    	int a[20][20];
    
    	printf("请输入你想设置的矩阵的大小N(0=<N<=20):");
    	scanf_s("%d", &n);
    
    	printf("请输入此时N*N的整数矩阵a[N][N]的内容(0=<N<=20)\n");
    	for (i = 0; i < n; i++)
    	{
    		for (j = 0; j < n; j++)
    		{
    			scanf_s("%d", &a[i][j]);
    		}
    	}
    
    	if (n % 2 == 0)
    	{
    		for (i = 0; i < n; i++)
    		{
    			sum1 += a[i][i];
    			sum2 += a[i][n - i - 1];
    		}
    		sum = sum1 + sum2;
    	}
    	else
    	{
    		for (i = 0; i < n; i++)
    		{
    			sum1 += a[i][i];
    			sum2 += a[i][n - i - 1];
    		}
    		sum = sum1 + sum2 - a[i / 2][i / 2];
    	}
    
    	printf("主对角线的和是:%d\n反对角线的和是:%d\n主对角线之和和反对角之和的总和是:%d\n", sum1, sum2, sum);
    	return 0;
    }
    
    展开全文
  • python 数组按反对角线顺序输出

    万次阅读 2018-12-14 15:59:54
    仔细观察不难发现遍历的时候越界一般会返回第一行或者最后一列之后再按反对角线遍历 那么我可以建立2个数组,一个只放原数组第一行和最后一列的元素,第二个数组放原数组剩下的元素 比如题目描述 A=[1,2,3,4,8,12...
  • 1. numpy二维数组得对角线 import numpy as np a=np.array([[3,1,5], [6,7,9], [8,2,4]]) print(a) 正对角线 b=np.diag(a) # 主对角线 ...反对角线 step1:左右翻转 np.fliplr() 矩阵左右翻转,在二维的情况下
  • #include <stdio.h> void main() { int a[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}; int i; int s=0; for (i=0;i<=3;i++) s=s+a[i][3-i]; printf("%d",s); }
  • //检查反对角线 for ( i = 0 ; i < size ; i ++ ) { if ( board [ i ] [ size - i - 1 ] == 1 ) { num0fx ++ ; } else num0f0 ++ ; } if ( num0fx == size ) { result = 0 ; } else ...
  • 此函数将方阵作为输入并返回两个输出。 第一个是一个向量,包含... 第二个输出给出沿反对角线的元素的总和。 例如: a = [1 2 3; 4 5 6; 7 8 9]; [b,c] = diagtrav(a); b = [1 2 4 3 5 7 6 8 9]; c = [1 6 15 14 9];
  • oj-14-矩阵对角线和反对角线的和

    千次阅读 2016-12-12 21:04:58
    #include #include int main() { int matrix[3][3],i,j,sum1,sum2; for(i=0;i;i++) { for(j=0;j;j++) { scanf("%d",&matrix[i][j]); } } sum1=matr
  • 求数据为{1, 2, 3,4, 5, 6,7, 8, 9}的二维数组(3行3列)的主对角线元素的和和反对角线的和。
  • 将N x N矩阵主对角线元素中的值与反对角线对应位置上元素中的值进行交换要求如下C源码如下思路说明 要求如下 将两个数组主对角线与反对角线上的元素交换,如下所示。 // 1 2 3 4 --> 4 3 2 1 // 4 5 6 7 --&...
  • package arraytest; public class Array { public static void main(String args[]) { String y[][] = new String[10][10]; for(int i=0;i&lt;y.length;i++) { for(int j=0;...j+...
  • #这是求任意列表组成数反对角线任意相邻n个数的和 L1=len(a[ 0 ][:]) #行数 L2=len(a) #列数 b=[] #c=[[0]*3]*3创建一个三维的列表,但是这样会造成预先那个不到的情况 #比如c=[[],[],[]]与c=[[0]*3]*3...
  • 从右上角到左下角沿反对角线打印方阵中的元素
  • //在主方法中定义一个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’;输出这个数组中的所有元素。 char [][]y=new char [10][10]; for(int i=0;i<10;i++) { ...
  • 京 航 空 航 天 大 学 二 三 年 硕 士 研 究 生 入 学 考 试 试 题 考试科目:数据结构与操作系统 说 明:答案一律写在答题纸上,数据结构部分编程语言不限 第一部分 数据结构(75分) 已知n*n的矩阵a反对角线的左上角...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,422
精华内容 568
关键字:

反对角线