精华内容
下载资源
问答
  • 2020-12-17 11:26:31

    题目

    要求将一个矩阵转置
    由用户输入行列

    思路:
    如果有用户输入行列的话,我们不知道用户输入了一个几维的数组,所以这样要回归到数组的本来定义是申请一块连续的存储空间,比如一个二维数组存储情况的一维表现就是a11,a12,a21,a22。所以利用这个特性,来解决这个问题。

    #include<iostream>
    using namespace std;
    void convert(int *array,int n)
    {
        int i,j,k;
        for(i=0;i<n;i++)
        {
            for(j=0;j<i;j++)
            {
                k=*(array+i*n+j);
                *(array+i*n+j)=*(array+i+j*n);
                *(array+i+j*n)=k;
            }
        }
    }
    int main()
    {
        int i,j,n;
        int *p;
        cout<<"input n"<<endl;
        cin>>n;
        p=new int[n*n];
        cout<<"input element"<<endl;
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                cin>>p[i*n+j];
            }
        }
        cout<<"before: "<<endl;
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                cout<<p[i*n+j]<<" ";
            }
            cout<<endl;
        }
        cout<<"afetr: "<<endl;
        convert(p,n);
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                cout<<p[i*n+j]<<"  ";
            }
            cout<<endl;
        }
    }
    

    结果

    input n
    2
    input element
    1
    2
    3
    4
    before: 
    1 2 
    3 4 
    afetr: 
    1  3  
    2  4  
    
    更多相关内容
  • C++11标准之前,一般是利用rand()函数产生一个均匀分布的,范围从0到系统相关的最大值之间的随机整数,然后再通过转换得到不同分布的随机数,这种方法比较麻烦,同时转换过程中会引入非随机性。 C++11标准中,...

    简介

    在C++11标准之前,一般是利用rand()函数产生一个均匀分布的,范围从0到系统相关的最大值之间的随机整数,然后再通过转换得到不同分布的随机数,这种方法比较麻烦,同时转换过程中会引入非随机性。

    C++11标准中,定义了随机数引擎类随机数分布类,通过随机数引擎和随机数分布的组合,可以产生各种分布的随机数。这些类包含在头文件random中,使用前需要先包含random头文件:

    #include<random>

    随机数产生

    随机数引擎和随机数分布都是重载了调用运算符"()"的函数对象类,随机数引擎的调用运算符不接受参数,并且返回一个unsigned随机数,称为原始随机数。而随机数分布的调用运算符接受一个随机数引擎类作为参数,返回服从特定分布的随机数。

    1 随机数引擎
    一般采用default_random_engine类创建一个随机数引擎对象(default_random_engine的具体实现与不同的编译器有关)。创建随机数引擎的方式如下
    default_random_engine e;

    2 随机数分布
    随机数服从的分布由随机数分布类决定,如

    分布类型随机数分布类
    正态分布normal_distribution<RealT> n(m,s) 均值为m,标准差为s,m默认值为0,s默认值为1
    χ 2 \chi^2 χ2分布chi_squared_distribution<RealT> c(x) x为自由度,默认为1.0
    T分布student_t_distribution<RealT> s(n) n为自由度,默认为1

    3 利用随机数分布和引擎产生随机数
    以正态分布为例,下面的例子产生一个服从 N ( 0 , 1 0 2 ) N(0,10^2) N(0,102)(即均值0,标准差10的正态分布)的随机数。

    #include<iostream>
    #include<random>
    #include<ctime>
    using namespace std;
    int main(){
      //产生随机数引擎,采用time作为种子,以确保每次运行程序都会得到不同的结果
      static default_random_engine e(time(0));
      //产生正态分布对象
      static normal_distribution<double> n(0,10);
      double random_number=n(e);//把引擎作为参数,调用随机分布对象
      cout<<random_number<<endl;
      return 0
    }
    

    最好把引擎和分布都定义为static。

    使用Eigen库和C++随机数机制,产生正态分布的随机矩阵

    Eigen中只有产生均匀分布随机矩阵的Random(),没有其他分布类型的随机矩阵函数。

    借助Eigen提供的unaryExpr函数,可以对矩阵的每一个元素进行同一个操作。unaryExpr接受一个函数对象作为参数,该函数对象定义了所要对元素进行的运算。因此,我们只需要定一个产生随机数的函数对象,将其作为参数传给unaryExpr,即可对矩阵每一个元素产生随机数。可以用lambda表达式作为函数对象,也可以定义一个函数,并用ptr_fun()函数将函数指针转成函数对象。下面给出这两种方式的实现。

    1 采用lambda表达式

    #include<iostream>
    #include<random>
    #include<Eigen/Eigen>
    #include<ctime>
    using namespace std;
    using namespace Eigen;
    
    int main(){
      static default_random_engine e(time(0));
      static normal_distribution<double> n(0,10);
      MatrixXd m=MatrixXd::Zero(10,10).unaryExpr([](double dummy){return n(e);});
      cout<<"Gaussian random matrix:\n"<<m<<endl;
      cout<<"Mean: "<<m.mean()<<endl;
      MatrixXd m2=(m.array()-m.mean())*(m.array()-m.mean());
      cout<<"std: "<<sqrt(m2.sum()/(m2.size()-1))<<endl;
    }
    

    2 采用ptr_fun将函数指针转成函数对象

    #include<iostream>
    #include<random>
    #include<Eigen/Eigen>
    #include<ctime>
    using namespace std;
    using namespace Eigen;
    
    double generate_random(double dummy){
      static default_random_engine e(time(0));
      static normal_distribution<double> n(0,10);
      return n(e);
    }
    
    int main(){
      MatrixXd m=MatrixXd::Zero(10,10).unaryExpr(ptr_fun(generate_random));
      cout<<"Gaussian random matrix:\n"<<m<<endl;
      cout<<"Mean: "<<m.mean()<<endl;
      MatrixXd m2=(m.array()-m.mean())*(m.array()-m.mean());
      cout<<"std: "<<sqrt(m2.sum()/(m2.size()-1))<<endl;
    }
    

    3 采用原始的二重for循环
    当然也可以遍历矩阵的每一个元素,并用随机数给每个元素赋值,这种做法简单暴力

    展开全文
  • c++ 生成矩阵矩阵乘法运算

     实现了矩阵的生成、乘法运算。

     1.完整代码如下:

    #include <iostream>
    #include <cstring>
    #include <chrono>
    #include <vector>
    using namespace std;
    struct Matrix
    {
    	vector<vector<int>> M;
    	size_t Rows;
    	size_t Columns;
    	Matrix(size_t r = 0,size_t c=0,int rv = 1)
    	{
    		Rows = r;
    		Columns = c;
    		for (size_t i = 0; i < r; i++)
    		{
    			vector<int> t;
    			for (size_t j = 0; j < c; j++)
    			{	
    
    				if (rv > 1)
    				{
    					t.push_back(rand() % rv);
    				}
    				t.push_back(rv);
    			}
    			M.push_back(t);
    		}
    	}
    
    	bool isNull()
    	{
    		return Rows == 0 || Columns == 0;
    	}
    
    	void printMatrix(const char* msg = "")
    	{
    		if (strlen(msg)>0)
    		{
    			printf("%s\n", msg);
    		}
    		for (size_t i = 0; i < Rows; i++)
    		{
    			for (size_t j = 0; j < Columns; j++)
    				printf("%d,",M[i][j]);
    			printf("\n");
    		}
    	}
    };
    // A*B
    Matrix mulMatrix(Matrix a, Matrix b)
    {
    	if (a.isNull() || b.isNull())
    	{
    		printf("空矩阵\n");
    		// 此处直接返回一个空的Matrix,也就是0行0列的矩阵
    		return	Matrix();
    	}
    	if (a.Columns != b.Rows)
    	{
    		printf("不符合乘法要求的矩阵");
    		// 此处直接返回一个空的Matrix,也就是0行0列的矩阵
    		return	Matrix();
    	}
    
    	//如果符合要求,构建一个结果矩阵
    	Matrix c(a.Rows, b.Columns);
    
    	for (size_t i = 0; i < a.Rows; i++)
    	{
    		for (size_t j = 0; j < b.Columns; j++)
    		{
    			//在进行默认构建时,所有矩阵中的数据全为1,所以此处需要进行置0
    			c.M[i][j] = 0;
    			for (size_t k = 0; k < a.Columns; k++)
    			{
    				c.M[i][j] += a.M[i][k] * b.M[k][j];
    			}
    		}
    	}
    	return c;
    }
    
    int main(int argc, char **argv)
    {
    	std::cout << "开始执行矩阵运算:(输入0退出程序)" << endl;
    	while (true)
    	{
    		std::cout << "请输入矩阵的阶数:" << endl;
    
    		int len = 0;
    
    		cin >> len;
    
    		cout << "您输入的矩阵阶数为:" << len << endl;
    
    		if (len < 1)
    		{
    			cout << "无效的阶数:" << len << endl;
    			return 0;
    		}
    
    		Matrix Ma(len, len, 10);
    		//Ma.printMatrix("随机生成的方阵Ma如下:");
    
    		Matrix Mb(len, 1, 10);
    		//Mb.printMatrix("随机生成的列向量Mb如下:");
    
    		auto t1 = chrono::steady_clock::now();
    		Matrix Mc = mulMatrix(Ma, Mb);
    
    		auto t2 = chrono::steady_clock::now();
    
    		double timeSpan = chrono::duration<double, std::milli>(t2 - t1).count();
    
    		printf("总用时为:%f ms", timeSpan);
    
    		//Mc.printMatrix("----------Ma*Mb的结果如下:----------");
    	}
    	
    	
    	return 0;
    
    }
    

    2.后期的扩展方向:

    1. 将结构体封装为一个类,
    2. 编写其他的矩阵操作函数
    3. 运算符的重构

    展开全文
  • 这样就生成了一个(3, 32, 32)的矩阵,而OpenCV也提供了方法进行生成: #include<iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main() { Mat a(32, 32, CV_32...

    在pytorch中,我们可以很轻易地生成

    import torch
    torch.randn(3, 32, 32)
    

    这样就生成了一个(3, 32, 32)的矩阵,而OpenCV也提供了方法进行生成:

    #include<iostream>
    #include <opencv2/opencv.hpp>
    
    using namespace std;
    using namespace cv;
    int main()
    {
        Mat a(32, 32, CV_32FC3);
        // 实例化一个随机数发生器
        RNG rng;
        // 使用fill方法
        rng.fill(a, RNG::UNIFORM, 0.f, 1.f);
        // 输出结果
        cout << a << endl;
        cout << a.size << endl;
    
        return 0;
    }
    
    void fill( InputOutputArray mat, int distType, InputArray a, InputArray b, bool saturateRange=false );
    
    InputOutputArray                    输入输出矩阵,最多支持4通道,超过4通道先用reshape()改变结构
    
    int distType                             UNIFORM 或 NORMAL,表示均匀分布和高斯分布
    
    InputArray a                           disType是UNIFORM,a表示为下界(闭区间);disType是NORMAL,a均值
    
    InputArray b                           disType是UNIFORM,b表示为上界(开区间);disType是NORMAL,b标准差
    
    bool saturateRange=false     
    只针对均匀分布有效。当为真的时候,会先把产生随机数的范围变换到数据类型的范围,再产生随机数;
    如果为假,会先产生随机数,再进行截断到数据类型的有效区间。请看以下fillM1和fillM2的例子并观察结果 
    
    展开全文
  • C语言如何生成一个随机矩阵

    千次阅读 2021-05-20 07:53:33
    生产随机矩阵的关键在于使用随机函数rand()。rand()表头文件:#include<stdlib.h>定义函数:intrand(void)函数说明:因为rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期特别长,所以...
  • 如题 文章目录 原代码 运行三次结果输出: 解决方法 运行结果 参考 原代码 #include using std::cout; int main() { for (int i = 0; i ; i++) { cout () ; } } 运行三次结果输出... 参考 C++产生随机数一直重复的问题
  • 批注:这里随机生成非零位置未排除重复位置,可能事实稀疏度会略低于给定的稀疏度。 #include "iostream" #include "Eigen/SparseCore" #include "time.h" using namespace std; using namespace Eigen; Spa..
  • 本文分享了C语言/C++如何生成随机数的具体实现方法,供大家参考,具体内容如下 C语言/C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,C语言/C++里没有自带的random(int number)函数。 (1) 如果你只要...
  • c++实现求矩阵行列式

    2011-12-26 13:31:09
    c++实现求矩阵的行列式值,通过递归方式求解。
  • 前言我是遥感专业,专职遥感图像处理 ,我们知道遥感影像就是一个个数组,或者说矩阵,所以说对影像操作就是对数组操作,所以学习数组的用法极为重要。我们知道C++中的return只能返回一个数值,而不能返回一个数组,...
  • Eigen矩库的Random函数可用来生成随机数矩阵,其中生成整数类型的矩阵时,数字值随机分布,生成浮点数类型的矩阵时,生成的随机数范围在[-1:1]内。 对应的Random也有三种使用变形: 1.第一种为n*n的矩阵; 2.第
  • 旋转矩阵C++

    2022-02-14 15:23:21
    旋转矩阵C++ 题目介绍 给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。 不占用额外内存空间能否做到? 示例 1: 给定 matrix = [ [1,2,3], [4,5,6], [7,8,9] ...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼例如输入5,自动生成刑如01020304051617181906152425200714232221081312111009的东西程序代码如下(可能有点复杂,小弟刚刚开始学习C语言哈^_^)#includevoidmain(){inta...
  • C语言如何随机生成一个矩阵

    千次阅读 2021-05-20 07:53:43
    C语言如何随机生成一个矩阵发布时间:2020-10-19 18:13:23来源:亿速云阅读:270作者:Leah这篇文章将为大家详细讲解有关C语言如何随机生成一个矩阵,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完...
  • c++函数 设已知矩阵 int mat[8][8]。如某元素在所在行与所在列中均为最大值或最小值,则被称为极点;如某元素在所在行中是最大值,在所在列中是最小值,则被称为鞍点。编程找出矩阵mat中的所有极点与鞍点。(本人萌...
  • C/C++实现矩阵的转置(示例代码)需要的朋友可以过来参考下,希望对大家有所帮助
  • C++如何创建对角矩阵

    2020-08-12 22:12:56
    问题描述 如题所述 解决方案 #define SIZE 3 int eye[SIZE][SIZE] = {0}; int main() { for (int i = 0; i < SIZE ; ++i) { eye[i][i] = 1;...Initialize an “eye” (identity) matrix array in C
  • C++中实现矩阵运算(Eigen基础使用) 很多使用过matlab的人肯定对于其中方便的矩阵运算有很深的印象,那么如何在C++上同样实现像matlab一样的便捷计算呢?最近新学到了一个名为Eigen的库,这里记录一下希望加深...
  • c++生成随机平面无向连通图

    千次阅读 2020-09-14 17:29:50
    前言:为了检验路径搜索算法的优劣,需要用大量的图的数据来运行对应的算法,例如深度优先搜搜、宽度优先搜索、迪杰斯特拉算法等等,而对于大多数实际问题,例如...基于此需求,本人想出了一个随机生成平面无向图的算法
  • 建立随机矩阵,及生成新矩阵

    千次阅读 2019-01-02 10:08:06
    首先要说的是建立随机数: 用rand()函数建立(0,1)之间的随机数。... 建立二维n * n的随机矩阵。     A = [1, 2 ,3;  4, 5, 6;  7 ,8, 9];   triu(A); %输出上三角 输出: ans =  1 2 3  ...
  • C++产生随机数,随机序列和随机分布

    千次阅读 2020-02-22 13:36:00
    1.产生[0 N-1]区间的一个随机整数 2.产生一个[0 1]区间的随机小数 3.产生一个[0 N-1]区间的随机序列 4.产生服从某个分布的概率随机数 1.产生[0 N-1]区间的一个随机整数 #include <iostream> #include<...
  • 数据结构 C/C++ 三角矩阵

    千次阅读 2020-01-09 14:18:14
    #include<stdio.h> int main() { int M,N; printf("请输入矩阵阶数n:"); scanf("%d",&N); int a[N][N],i,j,t=0;...C: printf("请选择三角矩阵类型:\n1.上三角矩阵\n2.下三角矩阵\n...
  • c++ Eigen矩阵运算

    2020-12-04 20:20:08
    算法中总会存在大量的矩阵运算,eigen提供便捷又强大的矩阵运算库,将理论可在C++中得以实现。 一下内容为基于官方教程进行的总结,官方教程地址: http://eigen.tuxfamily.org/dox/GettingStarted.html 一、定义...
  • 【C/C++开源库】C/C++矩阵运算开源库

    千次阅读 2021-08-20 01:17:20
    文章目录一、C++矩阵...深入学习三、C++矩阵运算库 - boost四、C语言矩阵运算库 -1.C语言矩阵库12.C语言矩阵库23.C语言矩阵库34.C语言矩阵库45.C语言矩阵库56.C语言矩阵库67.C语言矩阵库78.C语言矩阵库89.C语言矩阵
  • 快速生成N*N的随机矩阵

    千次阅读 2019-10-17 10:22:25
    实测单线程生成10000*10000的随机数矩阵只要2s 核心思想在于将二维矩阵转化为一维数组进行操作 编译:g++ -std=c++11 randomMaker.cpp -o randomMaker 运行:./randomMaker <dimension> randomMaker.cpp: #...
  • C++实现随机产生一个二维数组

    万次阅读 2018-03-15 14:33:00
    //要取得[a,b)的随机整数,使用(rand() % (b-a))+ a; //要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a; //要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1; } cout ; } return 0; }
  • C++ 快速随机数生成

    2021-05-24 01:42:51
    因为大多情况下我有大约超过500个节点,我需要随机地选择至少1/3的节点进行交换。所以我需要一个快速产生随机数的函数(标准函数rand()太慢了)。不需要多么巧妙,差不多就行了。注:忘了说,我无法使用除了标准库...
  • 8.随机生成一个矩阵并对其转置

    千次阅读 2020-09-26 17:05:14
    (1)随机初始化一个5*5的矩阵,并输出; (2)将其传递给函数,实现矩阵转置;...//生成5*5随机矩阵 void gr_juzhen(int a[][5],int max_size ) { // int i,j; srand(time(NULL)); for(int i=0;i<
  • (1) 输入的形式和输入值的范围:无需自己输入数据,程序是可以自动生成一个稀疏矩阵并输出在界面中。 (2)输出的形式:建立成功后会将三元组表中的数据按照每个元素所在的行号,列号输出元素值;稀疏矩阵的加法则...
  • 假设m×n 矩阵为A ,定义它的最大最小值为每一行最小值中的最大值: MaxMin=Maxi=1mMinj=1nAij 最小最大值定义为每一行最大值中的最小值: MinMax=Mini=1mMaxj=1nAij 例如A=153476 ,那么: RowMin=Minj=1nA1...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,275
精华内容 6,910
关键字:

c++生成随机矩阵

c++ 订阅
友情链接: ebjations_problems.rar