矩阵乘法

第10章:多元分析

戏子无情 提交于 2019-11-27 13:03:44
10.1 聚类分析 即群分析,是对多个样本(或指标)进行定量分类的一种多元统计分析方法。对样本进行分类称为Q型聚类分析,对指标进行分类称为R型聚类分析。 10.1.1 Q型聚类分析 (1)样本的相似性度量 对于定量变量,最常用的是闵式距离 绝对值距离 欧几里得距离:最常用,当坐标轴进行正交旋转时,它保持不变 切比雪夫距离 马氏距离:对一切线性变换是不变的 (2)类与类之间的相似性度量 最短距离法 最长距离法 重心法 类平均法 离差平方和法 (3)最短距离法(最近邻法)的计算步骤: clc,clear a=[1,0;1,1;3,2;4,3;2,5]; [m,n]=size(a); d=zeros(m); d=mandist(a'); %mandist求矩阵列向量组之间的两两绝对值距离 d=tril(d); %截取下三角元素 nd=nonzeros(d); %去掉d中的零元素,非零元素按列排列 nd=union([],nd) %去掉重复的非零元素 for i=1:m-1 nd_min=min(nd); [row,col]=find(d==nd_min);tm=union(row,col); %row和col归为一类 tm=reshape(tm,1,length(tm)); %把数据tm变成行向量 fprintf('第%d次合成,平台高度为%d时的分类结果为:%s\n',... i,nd

[矩阵乘法][线段树][dp] Hdu P6155 Subsequence Count

試著忘記壹切 提交于 2019-11-27 13:02:38
题解 首先我们考虑dp,设f[i][0/1]为做到si,以0或1结尾的方案数 f[i][0]=f[i-1][0]+f[i-1][1]+1,f[i][1]=f[i-1][1] (当si==0时) f[i][1]=f[i-1][0]+f[i-1][1]+1,f[i][0]=f[i-1][0] (当si==1时) 考虑将其变成类似矩阵乘法的东东 然后搞不考虑区间反转的话就可以取得40分的好成绩 可以用线段树来维护矩阵乘法,那么现在考虑区间取反操作怎么搞 当一个区间内的01串翻转之后相当于区间的矩阵第一行变为第二行,第一列变为第二列 代码 1 #include <cstdio> 2 #include <iostream> 3 #define ll long long 4 using namespace std; 5 const ll N=1e5+10,mo=1e9+7; 6 int T,n,q,tag[N*4]; 7 char s[N]; 8 struct matrix 9 { 10 ll a[2][2]; 11 void init(int d) 12 { 13 if (d>0) a[0][0]=a[0][1]=a[1][1]=1,a[1][0]=0; else a[0][0]=a[1][0]=a[1][1]=1,a[0][1]=0; 14 } 15 void change() {

NumPy 线性代数

十年热恋 提交于 2019-11-27 12:24:08
章节 Numpy 介绍 Numpy 安装 NumPy ndarray NumPy 数据类型 NumPy 数组创建 NumPy 基于已有数据创建数组 NumPy 基于数值区间创建数组 NumPy 数组切片 NumPy 广播 NumPy 数组迭代 NumPy 位运算 NumPy 字符串函数 NumPy 数学函数 NumPy 统计函数 NumPy 排序、查找、计数 NumPy 副本和视图 NumPy 矩阵库函数 NumPy 线性代数 NumPy中包含了numpy.linalg模块,提供线性代数运算功能。下表描述了该模块中的一些重要功能。 SN 函数 描述 1 dot() 两个数组的点积 2 vdot() 两个向量的点积 3 inner() 两个数组的内积 4 matmul() 两个数组的矩阵乘积 5 det() 计算矩阵的行列式 6 solve() 解线性矩阵方程 7 inv() 求矩阵的乘法逆矩阵 numpy.dot() numpy.dot() 计算两个数组的点积。 示例 import numpy as np a = np.array([[100,200],[23,12]]) b = np.array([[10,20],[12,21]]) dot = np.dot(a,b) #[100 * 10 + 200 * 12, 100 * 20 + 200 * 21] [23*10+12*12

DirectX 总结

强颜欢笑 提交于 2019-11-27 09:49:40
DDS DirectXDraw Surface file format, .dds。 这是微软从DirectX7开始引进的一种文件格式,它用来存储压缩的或未压缩的纹理,该格式支持mimaps cube maps和volume maps, D3DX和许多其他的DX工具都支持这种格式,比如DirectX Texture Editor(dxtex.exe)和Texture Conversion Tool(Texconv.exe),从D3D110开始,DDS文件也支持纹理数组 DXGI DirectX Graphics Infrastructure 转换为.x格式 MeshConvert.exe,这个tool位于Microsoft DirectX SDK \Utilities\bin\x86目录下面,可以用来转换.x文件,支持.x, .obj, .sdkmesh格式之间的相互转换,.sdkmesh是微软新的格式在DX10/DX11之后使用,用来取代.x格式,MeshConvert是一个命令行工具,使用方法如下 Usage: meshconvert <options> <input filename> <input filename> Input mesh filename. The input file can be of .x, .obj, or .sdkmesh format /o

动态规划

两盒软妹~` 提交于 2019-11-27 05:45:25
动态规划 算法总体思想 动态规划算法与分治法类似,其基本思想也是将 待求解问题分解成若干个子问题 。 但是经分解得到的 子问题往往不是互相独立 的。不同子问题的数目常常只有多项式量级。在用分治法求解时,有些子问题被重复计算了许多次。 如果能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,就可以避免大量重复计算,从而得到多项式时间算法。 动态规划基本步骤: (1)找出最优解的性质,并刻划其结构特征。 (2)递归地定义最优值。 (3)以自底向上的方式计算出最优值。 (4)根据计算最优值时得到的信息,构造最优解。 实例一、完全加括号的矩阵连乘积 问题可递归定义: (1)单个矩阵是完全加括号的; (2)矩阵连乘积A是完全加括号的 ,则A可表示为2个完全加括号的矩阵连乘积B和C的乘积并加括号,即 A = (BC)。 设有四个矩阵A,B,C,D它们的维数分别是: A = 50*10 , B = 10*40 , C = 40*30 , D = 30*5 总共有五中完全加括号的方式: 例如:((A(BC))D): 10 * 40 * 30 + 10 * 30 * 50 + 50 * 30 * 5 = 34500 给定矩阵{A1, A2, A3,..., An},其中Ai与A(i+1)是可乘的。i = 1,2,3, ..., n - 1。考察这n个矩阵的连乘积A1*A2*A3...An.

Python矩阵乘法实现

北城余情 提交于 2019-11-27 05:30:48
def matrixMul ( A , B ) : if len ( A [ 0 ] ) == len ( B ) : res = [ [ 0 ] * len ( B [ 0 ] ) for i in range ( len ( A ) ) ] for i in range ( len ( A ) ) : for j in range ( len ( B [ 0 ] ) ) : for k in range ( len ( B ) ) : res [ i ] [ j ] += A [ i ] [ k ] * B [ k ] [ j ] return res return ( '输入矩阵有误!' ) 来源: https://blog.csdn.net/qq_38314702/article/details/89419881

Matrix&Vector的运算

我是研究僧i 提交于 2019-11-27 00:51:35
Matrix&Vector的运算 原文地址: http://eigen.tuxfamily.org/dox/group__TutorialMatrixArithmetic.html 本章主要对矩阵、向量和标量之间的计算做一些简要介绍 介绍 为了实现矩阵(向量)之间的计算,Eigen同时提供了运算符重载(+、-、×、/ 等)和类方法(dot()、corss() 等)两大形式的工具。对于Matrix类,重载的运算符只支持线性代数相关算法。例如, matrix1*matrix2 意味着矩阵之间的点乘, vector+scalar 是不被允许的表达式。如果你需要数组操作而非线性代数计算,可参考 这里 。 加减运算 加减运算符左右的矩阵必须有相同的尺寸,也必须有相同的元素类型,Eigen不支持自动类型提升。一下为运算符示例: a+b、a-b、-a、a+=b、a-=b 。 矩阵与标量的乘除 矩阵乘或者除以标量的方法也很简单,例如: matrix/scalar、m*s、s*m、m/=s、m*=s 表达式注意事项 这里描述的是Eigen的高阶特性,具体内容可以参考 这里 ,这里我们稍微提一下。在EIgen中算术运算符并不做实际的计算,这些运算符只是返回一个 被标识 要做相关计算的对象,真实的计算发生在对整个表达式求值的时候,一般是遇见赋值等号的时候。这样做有利于编译器做优化。举个例子:

numpy 和 tensorflow 中的各种乘法(点乘和矩阵乘)

隐身守侯 提交于 2019-11-26 21:11:28
点乘和矩阵乘的区别: 1)点乘(即“ * ”) ---- 各个矩阵对应元素做乘法 若 w 为 m*1 的矩阵,x 为 m*n 的矩阵,那么通过点乘结果就会得到一个 m*n 的矩阵。 若 w 为 m*n 的矩阵,x 为 m*n 的矩阵,那么通过点乘结果就会得到一个 m*n 的矩阵。 w的列数 只能为 1 或 与x的列数相等 (即n), w的行数与x的行数相等 才能进行乘法运算。 2)矩阵乘 ---- 按照矩阵乘法规则做运算 若 w 为 m*p 的矩阵,x 为 p*n 的矩阵,那么通过矩阵相乘结果就会得到一个 m*n 的矩阵。 只有 w 的列数 == x的行数 时,才能进行乘法运算 1. numpy 1)点乘 ''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书! ''' 1 import numpy as np 2 3 w = np.array([[0.4], [1.2]]) 4 x = np.array([range(1,6), range(5,10)]) 5 6 print w 7 print x 8 print w*x 运行结果如下图: 2)矩阵乘 ''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,互帮互助

numpy 和 tensorflow 中的各种乘法(点乘和矩阵乘)

[亡魂溺海] 提交于 2019-11-26 20:41:14
点乘和矩阵乘的区别: 1)点乘(即“ * ”) ---- 各个矩阵对应元素做乘法 若 w 为 m*1 的矩阵,x 为 m*n 的矩阵,那么通过点乘结果就会得到一个 m*n 的矩阵。 若 w 为 m*n 的矩阵,x 为 m*n 的矩阵,那么通过点乘结果就会得到一个 m*n 的矩阵。 w的列数 只能为 1 或 与x的列数相等 (即n), w的行数与x的行数相等 才能进行乘法运算。 2)矩阵乘 ---- 按照矩阵乘法规则做运算 若 w 为 m*p 的矩阵,x 为 p*n 的矩阵,那么通过矩阵相乘结果就会得到一个 m*n 的矩阵。 只有 w 的列数 == x的行数 时,才能进行乘法运算 1. numpy 1)点乘 1 import numpy as np 2 3 w = np.array([[0.4], [1.2]]) 4 x = np.array([range(1,6), range(5,10)]) 5 6 print w 7 print x 8 print w*x 运行结果如下图: 2)矩阵乘 1 import numpy as np 2 3 w = np.array([[0.4, 1.2]]) 4 x = np.array([range(1,6), range(5,10)]) 5 6 print w 7 print x 8 print np.dot(w,x) 运行结果如下: 2.

loj #100. 矩阵乘法题解

无人久伴 提交于 2019-11-26 20:02:26
这题是比较基础的题目,主要用于理解矩阵乘法。 \(First\) \(of\) \(all\) ,我们要知道什么是矩阵乘法? 假设有一个 \(n\) * \(p\) 的矩阵 \(A\) 和 \(p\) * \(n\) 的矩阵 \(B\) ,如果令 \(C\) 为这两个矩阵相乘得到的乘积,那么有一个这样的式子 \(Ci,j=\sum ^{p}_ {k=1}A_{i,k}\times B_{k,j}\) 知道这个以后,我们就可以做这道题了: #include <iostream> #include <cstdio> #include <cmath> #include <algorithm> #define P 1000000007 using namespace std; long long a[511][511],b[511][511],c[511][511]; inline long long read() { char ch=getchar(); long long f=0,w=1; while(ch<'0' || ch>'9') { if(ch=='-') w=-1; ch=getchar(); } while(ch>='0' && ch<='9') { f=(f<<3)+(f<<1)+ch-'0'; ch=getchar(); } return f*w; } inline