矩阵乘法

【Python学习之路】Numpy 矩阵

早过忘川 提交于 2019-12-15 21:58:17
矩阵 使用 mat 方法将 2 维数组转化为矩阵: import numpy as np a = np . array ( [ [ 1 , 2 , 4 ] , [ 2 , 5 , 3 ] , [ 7 , 8 , 9 ] ] ) A = np . mat ( a ) A matrix([[1, 2, 4], [2, 5, 3], [7, 8, 9]]) 也可以使用 Matlab 的语法传入一个字符串来生成矩阵: A = np . mat ( '1,2,4;2,5,3;7,8,9' ) A matrix([[1, 2, 4], [2, 5, 3], [7, 8, 9]]) 利用分块创造新的矩阵: a = np . array ( [ [ 1 , 2 ] , [ 3 , 4 ] ] ) b = np . array ( [ [ 10 , 20 ] , [ 30 , 40 ] ] ) np . bmat ( 'a,b;b,a' ) matrix([[ 1, 2, 10, 20], [ 3, 4, 30, 40], [10, 20, 1, 2], [30, 40, 3, 4]]) 矩阵与向量的乘法: x = np . array ( [ [ 1 ] , [ 2 ] , [ 3 ] ] ) x array([[1], [2], [3]]) A * x matrix([[17], [21],

脉动阵列在二维矩阵乘法及卷积运算中的应用

你说的曾经没有我的故事 提交于 2019-12-14 19:11:02
脉动阵列(Systolic Array)本身是一个“古老”的概念,在1982年就已经提出了,可是,最近由于Google的TPU采用了这个结构作为计算的核心结构,脉动阵列又一次地火了起来。我也是因为关注TPU才开始去了解脉动阵列的,但是由于目前脉动的阵列比较零散,在搞明白脉动阵列以及TPU怎么使用脉动阵列进行卷积的过程中走了很多“弯路”,所以就用这篇文章作为我学习脉动阵列的笔记,也记录一下我自己对脉动阵列的理解,如果理解有误不到位的话,欢迎指出。 一、什么是脉动阵列? 脉动阵列,本身的核心概念就是让数据在运算单元的阵列中进行流动,减少访存的次数,并且使得结构更加规整,布线更加统一,提高频率。 可以看下面这个图,传统计算结构和脉动阵列结构的对比。左边是传统的计算架构,可用于各种形式的计算。CPU、GPU就是这种架构,用寄存器存储数据,一个程序告诉ALU从寄存器中取数,然后执行一种操作(例如加法、乘法或者逻辑操作),然后再把结果写会指定的寄存器中。脉动阵列,第一个ALU取数,经过处理后被传递到下一个ALU同时第二个数据进入第一个ALU。依次类推。在第一个数据到最后一个ALU之后,每个周期都能得到一个结果。这样,脉动阵列可以平衡IO读写与运算,在消耗较小memory带宽的情况下提高吞吐率,有效解决数据存取速度远远大于数据处理速度的结构。 脉动阵列本身只是一个有数据流动的结构

奇异值分解SVD

可紊 提交于 2019-12-13 00:45:46
在介绍奇异值分解(SVD)之前我们先来回顾一下关于矩阵的一些基础知识。 矩阵基础知识 方阵 给定一个$ n×m $的矩阵$ A $,若n和m相等也就是矩阵的行和列相等那矩阵$ A $就是一个方阵。 单位矩阵 在线性代数中,n阶单位矩阵,是一个$ n×n $的方阵,其主对角线元素为1,其余元素为0。单位矩阵以$ mathbf { I } _ { n } $表示。 单位矩阵性质: $$ text { 1. } I _ { n } B _ { n times m } = B _ { n times m } $$ $$ text { 2. } B _ { n times m } I _ { m } = B _ { n times m } $$ $$ text { 3. } A _ { n } I _ { n } = I _ { n } A _ { n } = A _ { n } $$ $$ text { 4. } I _ { n } I _ { n } = I _ { n } $$ 转置 矩阵的转置是最简单的一种矩阵变换。简单来说若$ n×m $的矩阵$ A $的转置为$ A ^ { mathrm { T } } $,则$ A ^ { mathrm { T } } $是一个$ m×n $的矩阵并且有$ mathbf { A } _ { i j } = mathbf { A } _ { j

1125:矩阵乘法

北城以北 提交于 2019-12-12 12:59:30
【题目描述】 计算两个矩阵的乘法。n×m阶的矩阵A乘以m×k阶的矩阵B得到的矩阵C 是n×k阶的,且C[i][j] = A[i][0]×B[0][j] + A[i][1]×B[1][j] + …… +A[i][m-1]×B[m-1][j](C[i][j]表示C矩阵中第i行第j列元素)。 【输入】 第一行为n, m, k,表示A矩阵是n行m列,B矩阵是m行k列,n, m, k均小于100。 然后先后输入A和B两个矩阵,A矩阵n行m列,B矩阵m行k列,矩阵中每个元素的绝对值不会大于1000。 【输出】 输出矩阵C,一共n行,每行k个整数,整数之间以一个空格分开。 【输入样例】 3 2 3 1 1 1 1 1 1 1 1 1 1 1 1 【输出样例】 2 2 2 2 2 2 2 2 2 #include <iostream> #define A 100+5 using namespace std; int i,j; int main() { int n,m,k,a[A][A],b[A][A],c[A][A]={0}; cin>>n>>m>>k; for(i=0;i<n;i++) { for(j=0;j<m;j++) { cin>>a[i][j]; } } for(i=0;i<m;i++) { for(j=0;j<k;j++) { cin>>b[i][j]; } } for(i=0;i<n

卷积的含义-详解

隐身守侯 提交于 2019-12-12 08:10:53
原文链接: 点击此处看知乎原文 最近需要用到卷积对图像进行处理,不明白卷积的含义,找资料的时候在知乎找到一个很优秀的评论,特此记录一下。以下内容来自于原文复制: 对卷积的困惑 卷积这个概念,很早以前就学过,但是一直没有搞懂。教科书上通常会给出定义,给出很多性质,也会用实例和图形进行解释,但究竟为什么要这么设计,这么计算,背后的意义是什么,往往语焉不详。作为一个学物理出身的人,一个公式倘若倘若给不出结合实际的直观的通俗的解释(也就是背后的“物理”意义),就觉得少了点什么,觉得不是真的懂了。 ​并且也解释了,先对g函数进行翻转,相当于在数轴上把g函数从右边褶到左边去,也就是卷积的“卷”的由来。 然后再把g函数平移到n,在这个位置对两个函数的对应点相乘,然后相加,这个过程是卷积的“积”的过程。 这个只是从计算的方式上对公式进行了解释,从数学上讲无可挑剔,但进一步追问,为什么要先翻转再平移,这么设计有何用意?还是有点费解。 在知乎,已经很多的热心网友对卷积举了很多形象的例子进行了解释,如卷地毯、丢骰子、打耳光、存钱等等。读完觉得非常生动有趣,但过细想想,还是感觉有些地方还是没解释清楚,甚至可能还有瑕疵,或者还可以改进(这些后面我会做一些分析)。 带着问题想了两个晚上,终于觉得有些问题想通了,所以就写出来跟网友分享,共同学习提高。不对的地方欢迎评论拍砖。。。 明确一下

矩阵乘法

孤人 提交于 2019-12-12 02:41:42
flag 蓝桥杯第17天 题目介绍 问题描述   输入两个矩阵,分别是m s,s n大小。输出两个矩阵相乘的结果。 输入格式   第一行,空格隔开的三个正整数m,s,n(均不超过200)。   接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j)。   接下来s行,每行n个空格隔开的整数,表示矩阵B(i,j)。 输出格式   m行,每行n个空格隔开的整数,输出相乘後的矩阵C(i,j)的值。 样例输入 2 3 2 1 0 -1 1 1 -3 0 3 1 2 3 1 样例输出 -3 2 -8 2 提示 矩阵C应该是m行n列,其中C(i,j)等于矩阵A第i行行向量与矩阵B第j列列向量的内积。 例如样例中C(1,1)=(1,0,-1) (0,1,3) = 1 * 0 +0 1+(-1)*3=-3 思路 读取输入数据到两个二维数组中,再根据乘法公式进行计算即可 一次就通过(1.0s擦边,毕竟三重循环) 代码 import java . util . Scanner ; public class Main { public static void main ( String [ ] args ) { Scanner input = new Scanner ( System . in ) ; int m = input . nextInt ( ) ; int s = input .

【矩阵分析】自学笔记(一)

百般思念 提交于 2019-12-11 23:27:00
向量空间 向量空间又称线性空间,是线性代数的中心内容和基本概念之一。在解析几何里引入 向量 概念后,使许多问题的处理变得更为简洁和清晰,在此基础上的进一步抽象化,形成了与 域 相联系的向量空间概念。譬如, 实系数多项式 的集合在定义适当的运算后构成向量空间,在代数上处理是方便的。单变元实函数的集合在定义适当的运算后,也构成向量空间,研究此类函数向量空间的数学分支称为泛函分析。 纯量域(标量域) 标量(scalar),亦称“无向量”。有些物理量,只具有数值大小,而没有方向,部分有正负之分。物理学中,标量(或作 纯量 )指在坐标变换下保持不变的物理量。用通俗的说法,标量是只有大小,没有方向的量。 逆元素 逆元素是指一个可以取消另一给定元素运算的元素,在数学里,逆元素广义化了加法中的加法逆元和乘法中的倒数。 张成空间 基 在线性代数中,基(也称为基底)是描述、刻画向量空间的基本工具。向量空间的基是它的一个特殊的子集,基的元素称为基向量。向量空间中任意一个元素,都可以唯一地表示成基向量的线性组合。如果基中元素个数有限,就称向量空间为有限维向量空间,将元素的个数称作向量空间的维数。 来源: CSDN 作者: Tsin # 链接: https://blog.csdn.net/tsin94/article/details/103493678

位置角度平移旋转,“乱七八糟”的坐标变换

风流意气都作罢 提交于 2019-12-11 01:19:15
​本文转载自微信公众号ROBOTICS 原作者:CC 编辑:古月居 原文链接: https://mp.weixin.qq.com/s/eOq5QweS-VIg2e0qmkihMw 今天我们要讲所有学习机器人学的人都需要具备的一项基本技能——坐标变换。看明白这篇文章,你需要一点基础的向量和矩阵知识,不用多,只要知道 向量的加减,点乘(内积);矩阵的定义、加减乘逆以及转置;还有矩阵与向量的乘法 就够了。 机器人学为什么需要坐标变换呢?因为控制一个机械臂的根本,就是弄明白每一个关节的joint position与end effector的position and orientation的关系,用更简洁的话来讲,就是joint space与operational space之间的互相映射关系。这里有两个小说明: 不仅仅是位置/角度的映射关系,也包括 速度、加速度、力或扭矩的映射关系 所有我直接用英文而没有翻译的词汇,都是我在 第一篇文章 中解释过的重要概念 好了,接下来就让我们暂时不谈机器人,先把让很多人觉得头疼的坐标变换搞明白。 坐标系(coordinate system) 描述空间位置、速度和加速度,大部分都是用笛卡尔坐标系,也就是大家熟知的三个互相垂直的坐标轴组成的坐标系。我只想强调几个地方: 像题图那样的彩色坐标系,若无特别说明,都是 rgb(红绿蓝)依次对应 xyz

数学基础 | (4) cs229线性代数基础

岁酱吖の 提交于 2019-12-10 14:02:40
目录 1. 基本概念和符号 2. 矩阵乘法 3. 运算和属性 4. 矩阵微分 1. 基本概念和符号 线性代数提供了一种紧凑地表示和操作线性方程组的方法。例如,以下方程组: 这是两个方程和两个变量,正如你从高中代数中所知,你可以找到 和 的唯一解(除非方程以某种方式退化,例如,如果第二个方程只是第一个的倍数,但在上面的情况下,实际上只有一个唯一解)。在矩阵表示法中,我们可以更紧凑地表达: 我们可以看到,这种形式的线性方程有许多优点(比如明显地节省空间). 基本符号 我们使用以下符号: 在许多情况下,将矩阵视为列向量或行向量的集合非常重要且方便。 通常,在向量而不是标量上操作在数学上(和概念上)更清晰。只要明确定义了符号,用于矩阵的列或行的表示方式并没有通用约定。 2. 矩阵乘法 向量-向量乘法 矩阵-向量乘法 矩阵-矩阵乘法 有了这些知识,我们现在可以看看四种不同的(形式不同,但结果是相同的)矩阵-矩阵乘法:也就是本节开头所定义的 的乘法。 矩阵C的第i列可以由矩阵A和矩阵B的第i列通过矩阵-向量乘积运算得到: 同理,矩阵C的第i行可以由矩阵A的第i行和矩阵B通过矩阵-向量乘积运算得到: 运算律: 3. 运算和属性 单位矩阵和对角矩阵 转置 对称矩阵 矩阵的迹 范数 线性相关性和秩 方阵的逆 请注意,并非所有矩阵都具有逆。例如,非方形矩阵根据没有逆的定义。然而,对于一些方形矩阵A

主成分分析(PCA)原理详解

我的未来我决定 提交于 2019-12-10 10:07:52
个人分类: 机器学习与Python 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhongkelee/article/details/44064401 转载请声明出处: http://blog.csdn.net/zhongkelee/article/details/44064401 一、PCA简介 1. 相关背景 上完陈恩红老师的《机器学习与知识发现》和季海波老师的《矩阵代数》两门课之后,颇有体会。最近在做主成分分析和奇异值分解方面的项目,所以记录一下心得体会。 在许多领域的研究与应用中,往往需要对反映事物的多个变量进行大量的观测,收集大量数据以便进行分析寻找规律。多变量大样本无疑会为研究和应用提供了丰富的信息,但也在一定程度上增加了数据采集的工作量,更重要的是在多数情况下,许多变量之间可能存在相关性,从而增加了问题分析的复杂性,同时对分析带来不便。如果分别对每个指标进行分析,分析往往是孤立的,而不是综合的。盲目减少指标会损失很多信息,容易产生错误的结论。 因此需要找到一个合理的方法,在减少需要分析的指标同时,尽量减少原指标包含信息的损失,以达到对所收集数据进行全面分析的目的。由于各变量间存在一定的相关关系,因此有可能用较少的综合指标分别综合存在于各变量中的各类信息。主成分分析与因子分析就属于这类降维的方法。 2. 问题描述