矩阵乘法

tensorflow--矩阵操作

匿名 (未验证) 提交于 2019-12-02 23:47:01
import tensorflow as tf #矩阵类型 myzero = tf.zeros([3,5]) #定义3行5列的0矩阵 myones = tf.ones([2,3]) #定义2行3列的矩阵 myfill = tf.fill([3,3],15) #定义3行3列的填充矩阵,填充值为15 myli = tf.linspace(0.0,5.,15) #0到5等分为15份 random_mat = tf.random_uniform([2,3],-2,5) #定义2行3列的-2到5的随机矩阵 data1 = tf.constant([[1,3],[2,5],[3,6]]) data2 = tf.constant([[1,2]]) data3 = tf.constant([[3],[4]]) data4 = tf.constant([[2,2]]) myadd = tf.add(data2,data4) #矩阵加法 mymul = tf.matmul(data2,data3) #矩阵乘法 mymultiply = tf.multiply(data2,data3) #矩阵直接相乘 print(data1.shape) # print(data1[0,:]) with tf.Session() as sess: # print(sess.run(myzero)) # print()

神经网络向量化与矩阵维度 [Andrew Ng 深度学习笔记]

匿名 (未验证) 提交于 2019-12-02 23:34:01
版权声明:联系邮箱:Originum@126.com 请注明出处: https://blog.csdn.net/Originum/article/details/90318910 成本函数: 单样本时,假设成本函数为: 那么多样本时,假设样本数为 m, 成本函数为: 就是把每个样本分别算出成本函数再相加。大概的思路是把m个样本的每次实验当作独立同分布的,所以总共m次实验在概率上应该全部乘起来。对累乘的结果取对数,增减性不变。把对数符号里的累乘符号提出,就变成累加的了。 为了方便后续计算,使 m 不同时,成本函数依然在一个数量级(保持和单样本时一样的尺度),故要对成本函数进行缩放 在前面加一个尺度因子(scale factor),公式变为: 其实全局的成本函数,就是对局部的成本函数求平均值 然后在反向传播的求偏导时, 向量化 因为要求均值,所以要计算每个样本的各种值。 拿这个网络举例子: 其中,x 是 x1, x2, x3组成的列向量,上标 i 表示其是第 i 个训练样本,[] 里表示的是位于哪一层 这里用的是显式的循环,依次求出每个样本的各种值,这样效率很低 向量化的方法实现: 就是把 m 个训练样本的值并起来,形成矩阵 横向表示的是不同的样本,纵向表示的是同一层中不同的神经元 公式变成了: 可以得出,只需进行一次矩阵乘法,就可以得到 m 个样本各自的值了 刚刚列举的是前向传播

矩阵乘法np.dot()及np.multiply()以及*

匿名 (未验证) 提交于 2019-12-02 22:51:30
np.dot(A, B):对于二维矩阵,计算真正意义上的矩阵乘积,同线性代数中矩阵乘法的定义。对于一维矩阵,计算两者的内积。见如下Python代码: import numpy as np # 2-D array: 2 x 3 two_dim_matrix_one = np.array([[1, 2, 3], [4, 5, 6]]) # 2-D array: 3 x 2 two_dim_matrix_two = np.array([[1, 2], [3, 4], [5, 6]]) two_multi_res = np.dot(two_dim_matrix_one, two_dim_matrix_two) print('two_multi_res: %s' %(two_multi_res)) # 1-D array one_dim_vec_one = np.array([1, 2, 3]) one_dim_vec_two = np.array([4, 5, 6]) one_result_res = np.dot(one_dim_vec_one, one_dim_vec_two) print('one_result_res: %s' %(one_result_res)) 结果如下: two_multi_res: [[22 28] [49 64]] one_result_res: 32

Pytorch-Tensor基本操作

蓝咒 提交于 2019-12-02 20:21:36
(此文为个人学习pytorch时的笔记,便于之后的查询) Tensor基本操作 创建tensor: ​ 1.numpy向量转tensor: a=np.array([2,2,2]) b=torch.from_numpy(a) ​ 2.列表转tensor: a=torch.tensor([2,2]) b=torch.FloatTensor([2,2.])#不常用 c=torch.tensor([[1,2],[3,4]])#2*2矩阵 ​ 3.利用大写接受shape创建: torch.empty(2,3)#生成一个2*3的0矩阵 torch.Tensor(2,3)#生成一个2*3的随机矩阵 torch.IntTensor(2,3) torch.FloatTensor(2,3).type() 默认下,Tensor为‘torch.FloatTensor’类型,若要改为double类型的,则需要执行 torch.set_default_tensor_type(torch.DoubleTensor) 来修改。 ​ 4.随机创建Tensor: a=torch.rand(3,3)#创建3*3的0到1均匀分布的矩阵 a=torch.randn(3,3)#均值为0方差为1正态分布矩阵 torch.rand_like(a)#等价于下一条 torch.rand(a.shape) torch.randint

软考考点之矩阵乘法

*爱你&永不变心* 提交于 2019-12-02 11:10:25
如2019年上半年软考第65题 第64题:已知矩阵Am*n和Bn*p相乘的时间复杂度为O(mnp)。矩阵相乘满足结合律,如三 个矩阵A、B、C相乘的顺序可以是(A*B)*C也可以是A*(B*C)。不同的相乘顺序所需进行的乘 法次数可能有很大的差别。因此确定n个矩阵相乘的最优计算顺序是一个非常重要的问题。已 知确定n个矩阵A 1 A 2 ......A n 相乘的计算顺序具有最优子结构,即A 1 A 2 ......A n 的最优计算顺序包 含其子问题A 1 A 2 ......A k 和A k+1 A k+2 ......A n (1≤k<n)的最优计算顺序。 可以列出其递归式为: 其中,A i 的维度为p i-1 *p i ,m[i,j]表示A i A i+1 ......A j 最优计算顺序的相乘次数。 先采用自底向上的方法求n个矩阵相乘的最优计算顺序。则求解该问题的算法设计策略为( )。算法的时间复杂度为( ),空间复杂度为( )。 给定一个实例,(p 0 p 1 ......p 5 )=(20,15,4,10,20,25),最优计算顺序为( )。 又如2016年下半年第65题 第65题:两个矩阵A m*n 和B n*p 相乘,用基本的方法进行,则需要的乘法次数为m*n*p。多个矩阵 相乘满足结合律,不同的乘法顺序所需要的乘法次数不同。考虑采用动态规划方法确定M i , M

矩阵相乘提高版

半城伤御伤魂 提交于 2019-12-02 10:55:10
Description 在科学计算中经常要计算矩阵的乘积。矩阵A和B可乘的条件是矩阵A的列数等于矩阵B的行数。若A是一个m行、n列的矩阵(简称m×n的矩阵),B是一个n行、p列的矩阵(简称n×p的矩阵),则其乘积C=A×B是一个m×p的矩阵。其标准计算公式为:             由该公式知计算C=A×B总共需要进行m×n×p次的数乘法,我们将两个矩阵乘法次数定义为矩阵想乘的时间复杂度。   矩阵乘法满足矩阵乘法满足结合律(但不满足交换律),即对于D=A×B×C,可以有如下两种计算方式:        1、D=(A×B)×C      2、D=A×(B×C)   假设A是个10×100的矩阵、B是个100×5的矩阵,C是个5×50的矩阵,那么:    ●按照第一种计算方法得到的时间复杂度是:10×100×5+10×5×50=7500;    ●按照第一种计算方法得到的时间复杂度是:100×5×50+10×100×50=75000;   所以不同的计算顺序得到的时间复杂度是不一样的,现在的问题是:顺序给出n个矩阵的大小,请计算出它们的乘积的最小的时间复杂度。 Input   第一行输入一个正整数n,表示有n个矩阵。   接下来m行每行两个正整数Xi,Yi,其中第i行的两个数表示第i个矩阵的规模为Xi行、Yi列。所有的Xi、Yi<=100。   输入数据保证这些矩阵可以相乘。

Numpy | 22 线性代数

我们两清 提交于 2019-12-02 09:20:51
NumPy 提供了线性代数函数库 linalg ,该库包含了线性代数所需的所有功能。 函数 描述 dot 两个数组的点积,即元素对应相乘。 vdot 两个向量的点积 inner 两个数组的内积 matmul 两个数组的矩阵积 determinant 数组的行列式 solve 求解线性矩阵方程 inv 计算矩阵的乘法逆矩阵 numpy.dot() 对于两个一维的数组,计算的是这两个数组对应下标元素的乘积和(数学上称之为内积); 对于二维数组,计算的是两个数组的矩阵乘积; 对于多维数组,它的通用计算公式如下,即结果数组中的每个元素都是:数组a的最后一维上的所有元素与数组b的倒数第二位上的所有元素的乘积和: dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])。 numpy.dot(a, b, out=None) 参数说明: a : ndarray 数组 b : ndarray 数组 out : ndarray, 可选,用来保存dot()的计算结果 import numpy.matlib import numpy as np a = np.array([[1,2],[3,4]]) b = np.array([[11,12],[13,14]]) print(np.dot(a,b)) 输出结果为: [[37 40] [85 92]] 计算式为: [[1

稀疏矩阵计算器(三元组实现矩阵加减乘法)

回眸只為那壹抹淺笑 提交于 2019-12-02 09:05:38
一、问题描述: 稀疏矩阵是指那些多数元素为零的矩阵。利用“稀疏”特点进行存储(只存储非零元)和计算可以大大节省存储空间,提高计算效率。实现一个能进行稀疏矩阵基本运算的运算器。 二、需求分析: 以“带行逻辑链接信息”的三元组顺序表表示稀疏矩阵,实现两个矩阵相加、相减和相乘的运算。稀疏矩阵的输入形式采用三元组表示,而运算结果的矩阵则以通常的阵列形式列出。稀疏矩阵的输出要求:矩阵的行数、列数、非零元个数,以及详细的矩阵阵列形式。 三、代码实现 #include <stdio.h> #include <iostream> #define ERROR -1 #define MAXSIZE 12500 //非零元个数最大值MAXSIZE #define MAXRC 21 //各行第一个非零元位置最大值MAXRC #define OK 1 typedef int ElemType; typedef struct //同课本P98 { int i,j; ElemType e; } Triple; typedef struct //同课本P100 { Triple data[MAXSIZE+1]; //非零元三元组表 int rpos[MAXRC+1]; //各行第一个非零元的位置表 int mu,nu,tu; //矩阵的行数、列数和非零元个数 } RLSMatrix; void

使用MapReduce解决矩阵乘法的问题

做~自己de王妃 提交于 2019-12-02 07:01:36
摘要:在海量数据中淘金,已是各大互联网公司的既定目标,亚马逊是数据化运营的成功典范,Google、百度投巨资用于对海量数据进行深度学习研究,阿里把数据与平台、金融并列成为未来三大战略。想在海量数据中淘到金子,强大的挖掘工具是必不可少的,而诸如回归、聚类、主成分分析、决策树等数据挖掘算法常常涉及大规模矩阵运算。这其中,大矩阵乘法具有较大的时间消耗,是算法的瓶颈。所以将矩阵乘法移植到分布式系统中进行运算,可谓是基本需求,所以本文暂且从最基础开始,简单介绍使用MapReduce实现矩阵乘法的方式。 简单回顾一下矩阵乘法: 矩阵乘法要求左矩阵的列数与右矩阵的行数相等,m×n的矩阵A,与n×p的矩阵B相乘,结果为m×p的矩阵C。 为了方便描述,先进行假设: 矩阵A的行数为m,列数为n,a ij 为矩阵A第i行j列的元素。 矩阵B的行数为n,列数为p,b ij 为矩阵B第i行j列的元素。 分析 因为分布式计算的特点,需要找到相互独立的计算过程,以便能够在不同的节点上进行计算而不会彼此影响。根据矩阵乘法的公式,C中各个元素的计算都是相互独立的,即各个c ij 在计算过程中彼此不影响。这样的话,在Map阶段可以把计算所需要的元素都集中到同一个key中,然后,在Reduce阶段就可以从中解析出各个元素来计算c ij 。 另外,以a 11 为例,它将会在c 11 、c 12 ……c 1p 的计算中使用

Python 矩阵(线性代数)

╄→尐↘猪︶ㄣ 提交于 2019-12-02 04:56:44
Python 矩阵(线性代数) 这里有一份新手友好的 线性代数笔记 ,是和深度学习 花书 配套,还被Ian Goodfellow老师翻了牌。 笔记来自巴黎高等师范学院的博士生Hadrien Jean,是针对“花书”的 线性代数 一章,初来乍到的小伙伴可以在笔记的辅佐之下,了解深度学习最常用的数学理论,加以轻松的支配。 把 理论 和 代码 搭配食用,疗效更好。笔记里列举的各种 例子 ,可以帮初学者用一种更直观实用的方式学好线代。开始前,你需要准备好 Numpy 和 Python 。 然后来看一下,要走怎样一个疗程—— 1 标量、向量、矩阵和张量 △ 标量,向量,矩阵,张量 (左起) 这一课讲了向量和矩阵,以及它们的一些基础运算。另外,这里介绍了 Numpy 的一些相关 函数 ,也浅浅地谈到了 Broadcasting 机制。 2 矩阵和向量的乘法 △ 矩阵与向量的点乘 本小节主要讨论的是, 向量和矩阵的点积 ,我们可以从中了解矩阵的一些属性。之后,便是用矩阵符号来创建一个 线性方程组 ——这也是日后的学习里,经常要做的事情。 3 单位矩阵和逆矩阵 △ 单位矩阵长这样 我们要了解这两种矩阵 为什么重要 ,然后知道怎样在Numpy里和它们玩耍。另外,本小节包含用 逆矩阵求解线性方程组 的一个例题。 4 线性依赖与线性生成空间 线性方程组,除非 无解 ,不然要么有 唯一解 ,要么有