稀疏矩阵

Python的稀疏矩阵和参数保存 save/load

别等时光非礼了梦想. 提交于 2020-04-06 17:30:45
1. 稀疏矩阵的建立: coo_matrix () from scipy.sparse import coo_matrix # 建立稀疏矩阵 data = [1,2,3,4] row = [3,6,8,2] col = [0,7,4,9] c = coo_matrix((data,(row,col)),shape=(10,10)) #构建10*10的稀疏矩阵,其中不为0的值和位置在第一个参数 print(c) 2. 稀疏矩阵转化为密集矩阵: todense () d = c.todense() print(d) 3. 将一个 0值很多的矩阵 转化为稀疏矩阵 e = coo_matrix(d) #将一个0值很多的矩阵转为稀疏矩阵 print(e) 4. save :类似于matlab中的 .mat 格式,python也可以 保存参数数据 ,除了保存成csv,json,excel等之外,个人觉得matlab的.mat格式真的很强,啥都可以直接保存~~ import numpy as np # numpy.save(arg_1,arg_2),arg_1是文件名,arg_2是要保存的数组 aa = np.array(d) print(aa) # save np.save('test_save_1.npy', aa) #保存一个数组 np.savez('test_save_2', aa=aa

Matlab - 基础知识

烂漫一生 提交于 2020-03-30 02:11:55
Matlab R2016a完全自学一本通 记在前面: (1)函数中:dim=1 按列;dim=2 按行 (2)这本书很垃圾,不建议买。 (3)在数据库连接中,用两个单引号表示字符串,千万不能用双引号 第2章 Matlab基础知识 2.1 数据类型 数值,逻辑,字符串,函数句柄,结构体,单元数组 2.1.1 数值类型 int8,uint8;int16,uint16;int32,uint32;int64,uint64  整数型 single 单精度 double 双精度 (默认) 示例:int32(820) 查看数值类型 class() 函数 向下取整 floor(x) 向上取整 ceil(x) 四舍五入 round(x) 向0取整 fix(x) 以数轴的思想去思考。正整数时同floor 负整数时同ceil whos列出当前spacework的所有变量 eps函数 默认是1 eps(1)表示离1最近的浮点数值;因为精度只有这么多,算出的结果会去匹配到系统的精度。一般不影响计算结果,除非对数值有非常苛刻的要求。 复数部分: complex(a,b) : 构建复数 a+bi real(z) z的实部;image(z) z的虚部;abs(z) 复数z的模;angle(z) 复数的辐角;conj(z) 复数的共轭复数 无穷量(Inf) 和 非数值量(NaN) Inf -Inf NaN 2.1

sdut 1592转置矩阵【稀疏矩阵的压缩存储】【快速转置算法】

梦想与她 提交于 2020-03-18 15:16:15
转置矩阵 Time Limit: 1000ms Memory limit: 32768K 有疑问?点这里^_^ 题目链接: http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1592 题目描述 把矩阵A的行换成相应的列,得到的新矩阵称为A的转置矩阵,记作A'或A。 给你一个矩阵,求它的转置矩阵。 输入 输入数据的第一行是两个正整数R和C(1<=R,C<=10),分别代表矩阵的行数和列数。接下来R行,每行C个空格隔开的整数。 输出 输出转置后的矩阵,每行中相邻的两个数用空格隔开。 示例输入 3 3 1 2 3 4 5 6 7 8 9 示例输出 1 4 7 2 5 8 3 6 9 提示 代码: 1 #include<iostream> 2 #include<string.h> 3 #include<string> 4 using namespace std; 5 struct vode 6 { 7 int i,j; 8 int date; 9 }; 10 struct node 11 { 12 int mu,nu,tu; 13 struct vode data[1000]; 14 }; 15 struct node M,T; 16 void zhuanzhi(); 17 int main()

矩阵操作(数据,数组向量,表格)

余生颓废 提交于 2020-03-11 10:07:15
一、矩阵的表示 在MATLAB中创建矩阵有以下规则: a、矩阵元素必须在”[ ]”内; b、矩阵的同行元素之间用空格(或”,”)隔开; c、矩阵的行与行之间用”;”(或回车符)隔开; A=[1 2 3 4 5; 12 12 14 56 657; 23 46 34 67 56 ]; d、矩阵的元素可以是数值、变量、表达式或函数; e、矩阵的尺寸不必预先定义。 二,矩阵的创建: 1、直接输入法 最简单的建立矩阵的方法是从键盘直接输入矩阵的元素,输入的方法按照上面的规则。建立向量的时候可以利用冒号表达式,冒号表达式可以产生一个行向量,一般格式是: e1:e2:e3,其中e1为初始值,e2为步长,e3为终止值。还可以用linspace函数产生行向量,其调用格式为:linspace(a,b,n) ,其中a和b是生成向量的第一个和最后一个元素,n是元素总数。 linspace(1,5,8) ans = 1 至 5 列 1.0000 1.5714 2.1429 2.7143 3.2857 6 至 8 列 3.8571 4.4286 5.0000 2、利用MATLAB函数创建矩阵 基本矩阵函数如下: (1) ones()函数:产生全为1的矩阵,ones(n):产生n*n维的全1矩阵,ones(m,n):产生m*n维的全1矩阵; (2) zeros()函数:产生全为0的矩阵; (3) rand(

数据结构(十七)数组和矩阵

点点圈 提交于 2020-03-01 06:55:49
  一、数组的定义:数组是n(n>=1)个相同数据类型的数据元素构成的占用一块地址连续的内存单元的有限集合。所有的线性结构(包括线性表、堆栈、队列、串、数组和矩阵)的顺序存储结构实际上就是使用数组来存储。可见,数组是其他数据结构实现存续存储结构的基础,数组这种数据结构是软件设计中最基础的数据结构。   二、数组的实现机制:数组通常以字节为计数单位,同时根据内存单元地址映像公式来分配内存。用高级语言定义数组时,数组在内存中的首地址由系统动态分配并保存。高级语言通常用数组名保存在内存中的首地址。一旦确定了一个数组的首地址,系统就可计算出该数组中任意一个数组元素的内存地址。由于计算数组各个元素内存地址的时间相等,所以存取数组中任意一个元素的时间也相等,通常称具有这种特性的存储结构为随机存储结构。所以说数组具有随机存储结构的特性。   三、在数值分析中,常常会出现一些拥有许多相同数据元素或零元素的高阶矩阵。将具有许多相同元素或者零元素,且数据分布具有一定规律的矩阵称为特殊矩阵,例如,对称矩阵、三角矩阵和对角矩阵。为了节省存储空间,需要对这类矩阵进行压缩存储。压缩存储的原则是:多个值相同的矩阵元素分配同一个存储空间,零元素不分配存储空间。对于对称矩阵、三角矩阵和对角矩阵来说,首先根据矩阵中任意一个元素与压缩后一位数组的下标的对应关系得到每一个数据元素在数组中存储的位置

Java实现 稀疏矩阵乘积

爷,独闯天下 提交于 2020-02-25 20:06:56
稀疏矩阵乘积 描述 给定两个N × N的稀疏矩阵A和B,其中矩阵A有P个元素非0,矩阵B有Q个元素非0。请计算两个矩阵的乘积C = A × B并且输出C中所有非0的元素。 输入 第一行包含三个整数N, P, Q 以下P行每行三个整数i, j, k表示A矩阵的一个非0元素:Aij = k 以下Q行每行三个整数i, j, k表示B矩阵的一个非0元素:Bij = k 对于80%的数据,1 ≤ N, P, Q ≤ 200 对于100%的数据, 1 ≤ N, P, Q ≤ 2000, 1 ≤ i, j ≤ N, 0 ≤ k ≤ 100 输出 输出若干行,按先行后列的顺序输出矩阵C的每一个非0元素 每行三个整数i, j, k表示C矩阵的一个非0元素:Cij = k package 第二次模拟; import java.util.Scanner; public class Demo4矩阵相乘 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int p = sc.nextInt(); int q=sc.nextInt(); int [] [] a = new int [p][3]; int [] [] b = new int [q][3];

稀疏矩阵的三元组表与十字链表存储

假装没事ソ 提交于 2020-01-24 04:42:46
三元组表:存储稀疏矩阵的非零元素,以及该元素所在的行、列信息,极大的节省了空间(如相比于一般的二维数组的存储),而且三元组表的某些算法的时间效率也要优于经典算法,如基于三元组表的一次快速转置算法等等 十字链表:当要进行矩阵的加、减、乘等运算时,有时非零元素的位置会发生很大的变化,三元组表位保持以行或列序为主而大量移动元素,十字链表就比较灵活,它在三元组表的基础之上(元素e、行row、列col),多了两个指针域down和right(名称随意),right指向同一行中的下一个非零元素,down指向同一列的下一个非零元素 来源: CSDN 作者: 网络一线牵 珍惜这份缘 链接: https://blog.csdn.net/weixin_43838785/article/details/103827657

数据结构(java语言描述)串与数组——稀疏矩阵的三元组表存储

拟墨画扇 提交于 2020-01-20 01:22:35
知识点补充: 稀疏矩阵:是具有较多零元素且非零元素的分布无规律的矩阵。(一般矩阵是用多(二)维数组存储)。 但是,稀疏矩阵的存储比较浪费存储空间,因此为了节省存储空间可以用一个三元组表来存储稀疏矩阵。 三元组表:三元组表中的任意一个三元组元素存储了稀疏矩阵中的非零元素、所在行和所在列。 稀疏矩阵转三元表表示的原理图如下(ps手写版,比较快,将就看吧,主要是能明白^~^): java语言表示的三元组(结点)的类形式: package chuanshu; class tripleNode { //三元组的定义 private int row; //元素所在稀疏矩阵中的行号 private int col; //元素所在稀疏矩阵中的列号 private int value; //元素所在稀疏矩阵中的非零元素值 public int getcol(){ return col; } public int getrow(){ return row; } public void setcol(int col){ this.col=col; } public void setrow(int row){ this.row=row; } public int getvalue(){ return value; } public void setvalue(int value){ this.value

稀疏矩阵的压缩存储及其操作

若如初见. 提交于 2020-01-06 16:05:02
前言 按照压缩存储的概念,只存储稀疏矩阵的非零元; 一个三元组即可确定矩阵M的一个非零元; 主要有三种方法存储稀疏矩阵:三元组顺序表、行逻辑链接的顺序表、十字链表。 三元组顺序表 结构体和头文件 #include <stdio.h> #include <stdlib.h> #define MAXSIZE 12500 typedef struct { int i, j; // 非零元的行号,列号 int e; }Triple; typedef struct { Triple data[MAXSIZE+1]; int mu, nu, tu; //矩阵的行数,列数,非零元个数 }TSMatrix; 创建和存储稀疏矩阵 //创建稀疏矩阵 void create(TSMatrix *M, int mu, int nu, int tu) { (*M).mu = mu; (*M).nu = nu; (*M).tu = tu; M = (TSMatrix *) malloc (tu * sizeof(Triple)); } //压缩存储稀疏矩阵 void init(TSMatrix *M) { for(int n = 1; n <= (*M).tu; n++) { printf("输入第%d个非零元,格式为“行号 列号 值”(空格隔开):", n); int row, col, value;

稀疏矩阵的压缩存储及其操作

你。 提交于 2020-01-05 13:34:27
前言 按照压缩存储的概念,只存储稀疏矩阵的非零元; 一个三元组即可确定矩阵M的一个非零元; 主要有三种方法存储稀疏矩阵:三元组顺序表、行逻辑链接的顺序表、十字链表。 三元组顺序表 结构体和头文件 #include <stdio.h> #include <stdlib.h> #define MAXSIZE 12500 typedef struct { int i, j; // 非零元的行号,列号 int e; }Triple; typedef struct { Triple data[MAXSIZE+1]; int mu, nu, tu; //矩阵的行数,列数,非零元个数 }TSMatrix; 创建和存储稀疏矩阵 //创建稀疏矩阵 void create(TSMatrix *M, int mu, int nu, int tu) { (*M).mu = mu; (*M).nu = nu; (*M).tu = tu; M = (TSMatrix *) malloc (tu * sizeof(Triple)); } //压缩存储稀疏矩阵 void init(TSMatrix *M) { for(int n = 1; n <= (*M).tu; n++) { printf("输入第%d个非零元,格式为“行号 列号 值”(空格隔开):", n); int row, col, value;