矩阵乘法

numpy基本使用

我的梦境 提交于 2019-12-05 11:01:29
轴 axis 正常情况 0 行, 1 列 聚合函数 0列, 1 行 import numpy as np np.__version__ #查看numpy版本 一.创建ndarray 1.使用np.array()由python list创建 l = [1,4,2,5,6] n = np.array(l) 注意: numpy默认ndarray的所有元素的类型是相同的 如果传进来的列表中包含不同的类型,则统一为同一类型,优先级:str>float>int 2. 使用np的routines函数创建 1) np.ones(shape, dtype=None, order="C") 用来产生全是1的ndarray shape是用来指定ndarray的形状 dtype是数字的类型 例如: np.ones(shape=(7,7), dtype=np.int8) 2) np.zeros(shape, dtype=float, order='C') 用来产生全是0的ndarray 例如: np.zeros(shape=(7,7), dtype=np.float32) 3) np.full(shape, fill_value, dtype=None, order='C') 按照指定数字产生ndarray 例如: np.full(shape=(8,8), fill_value=8.) 4) np.eye

矩阵初步

穿精又带淫゛_ 提交于 2019-12-05 07:20:13
矩阵,主要用于递推/ \(dp\) 优化,以及特别的题目。 运算: 注意,矩阵有 \(+,-,*,pow\) 以及矩阵的逆等运算。本文讨论入门的 \(+,-,*,pow\) . 对于加法: \[ \left[ \begin{matrix} 1&3&5\\ 2&4&7\\ \end{matrix} \right]+ \left[ \begin{matrix} 2&9&7\\ 12&9&3\\ \end{matrix} \right] \] 即为: \[ \left[ \begin{matrix} 3&12&12\\ 14&13&10\\ \end{matrix} \right] \] 就是遵循按位相加的原则,减法同理。 注意矩阵的加减法必须是同行数同列数的矩阵。 对于乘法: 定义 \(C_{i,j}\) 是 \(A,B\) 两个矩阵乘完之后的矩阵对应的第 \(i\) 行第 \(j\) 列的元素。 规定 \(A\) 为 \(P*M\) 的矩阵, \(B\) 为 \(M*Q\) 的矩阵。 则有: \[C_{i,j}=\sum_{k=1}^{M}{A_{i,k}*B_{k,j}}\] 也可以简单理解为,对应行乘以对应列。 矩阵快速幂 就是一个矩阵的乘方。 注意,只有方阵才有乘方,即列数等于行数 \((n*n)\) 同样地,若求一个矩阵的 \(k\) 次方,可以和二进制快速幂一样

一目了然卷积神经网络 - An Intuitive Explanation of Convolutional Neural Networks

冷暖自知 提交于 2019-12-05 07:14:14
前言:简单翻译了一篇介绍卷积网络的文章,以学习了解卷积网络运行机制。 An Intuitive Explanation of Convolutional Neural Networks 原文地址: https://ujjwalkarn.me/2016/08/11/intuitive-explanation-convnets/comment-page-4/?unapproved=31867&moderation-hash=1ac28e426bc9919dc1a295563f9c60ae#comment-31867 一、什么是卷积神经网络、为什么卷积神经网络很重要?   卷积神经网络<Convolutional Neural Networks>简称ConvNets 或CNNs 属于分类神经网络,在某些领域已经被验证非常有效,比如图像识别、分类领域。ConvNets 不仅仅在人脸、物体、交通标志识别成功而且还助力于机器视觉与自动驾驶。 图 1: 来源 [ 1 ]   在上图 图1 中ConvNet 可以识别场景并且系统可以建立相关关联(“一个足球运动员在踢足球”),然而在下图 图2 的示例中展示了ConvNets 用于识别物体、人和动物。最近,ConvNets 在某些自然语言处理任务(例如句子分类)中也有效。[ 注:微软小冰、苹果Siri 等,读者也可以调用微软AI搭建自己的应用程序

矩阵加速数列

南楼画角 提交于 2019-12-05 06:41:05
矩阵乘法 没错,就是讲一下 这么简单的东西 ,但是大家可要注意: “别看矩阵乘法简单,矩阵可不简单 (逃” 并且luogu的题解有点错误,导致许多初学者混淆不清, 我有必要出面写个模板题题解 了解一下矩阵乘法的定义: 如果 A,B是矩阵,A的大小为 \(n*m\) , B的大小为 \(m*r\) \[如果C=A*B 那么对于C中的每个元素C_{i,j}就有:\] \[C_{i,j}=\sum_{k=1}^m A_{i,k}*B_{k,j}\] 所以C的大小为 \(n*r\) ,所以我们发现 只有A矩阵的列=B矩阵的行数 它们才能进行矩阵乘法。所以在矩阵乘法里不一定满足交换率,也就是 \(A*B\) ≠ \(B*A\) ,甚至说如果可以 \(A*B\) ,但是 \(B*A\) 不一定合法。 洛谷P1939 矩阵加速模板 如果有矩阵快速幂基础就简单了。 设 F = [] (糟了,不会Latex...) 来源: https://www.cnblogs.com/BaseAI/p/11911139.html

pytorch 花式张量(Tensor)操作

元气小坏坏 提交于 2019-12-05 02:34:09
一、张量的维度操作 1.squezee & unsqueeze x = torch.rand(5,1,2,1) x = torch.squeeze(x)#去掉大小为1的维度,x.shape =(5,2) x = torch.unsqueeze(x,3)#和squeeze相反在第三维上扩展,x.shape = (5,2,1) 2.张量扩散,在指定维度上将原来的张量扩展到指定大小,比如原来x是3 1,输入size为[3, 4],可以将其扩大成3 4,4为原来1个元素的复制 x = x.expand(*size) 3.转置,torch.transpose 只能交换两个维度 permute没有限制 x = torch.transpose(x, 1, 2) # 交换1和2维度 x = x.permute(1, 2, 3, 0) # 进行维度重组 4.改变形状,view&reshape 两者作用一样,区别在于是当从多的维度变到少的维度时,如果张量不是在连续内存存放,则view无法变成合并维度,会报错 x = x.view(1, 2, -1)#把原先tensor中的数据按照行优先的顺序排成一个一维的数据(这里应该是因为要求地址是连续存储的),然后按照参数组合成其他维度的tensor x = x.reshape(1, 2, -1) 5.张量拼接 cat & stack torch.cat(a

矩阵乘法

三世轮回 提交于 2019-12-04 23:14:34
这个结果是怎么算出来的? 教科书告诉你,计算规则是,第一个矩阵第一行的每个数字(2和1),各自乘以第二个矩阵第一列对应位置的数字(1和1),然后将乘积相加( 2 x 1 + 1 x 1),得到结果矩阵左上角的那个值3。 import tensorflow as tf a1=tf.constant([[2,1],[4,3]]) a2=tf.constant([[1,2],[1,0]]) a3=tf.matmul(a1,a2) sess=tf.Session() sess.run(a3) 来源: https://my.oschina.net/lwaif/blog/3131128

numpy.linalg.svd函数

血红的双手。 提交于 2019-12-04 20:35:49
本文链接:https://blog.csdn.net/rainpasttime/article/details/79831533 函数:np.linalg.svd(a,full_matrices=1,compute_uv=1)。 参数: a是一个形如(M,N)矩阵 full_matrices的取值是为0或者1,默认值为1,这时u的大小为(M,M),v的大小为(N,N) 。否则u的大小为(M,K),v的大小为(K,N) ,K=min(M,N)。 compute_uv的取值是为0或者1,默认值为1,表示计算u,s,v。为0的时候只计算s。 返回值: 总共有三个返回值u,s,v u大小为(M,M),s大小为(M,N),v大小为(N,N)。 A = u*s*v 其中s是对矩阵a的奇异值分解。s除了对角元素不为0,其他元素都为0,并且对角元素从大到小排列。s中有n个奇异值,一般排在后面的比较接近0,所以仅保留比较大的r个奇异值。 例子: >>> from numpy import * >>> data = mat([[1,2,3],[4,5,6]]) >>> U,sigma,VT = np.linalg.svd(data) >>> print U [[-0.3863177 -0.92236578] [-0.92236578 0.3863177 ]] >>> print sigma [9

[bzoj2396]神奇的矩阵

99封情书 提交于 2019-12-04 14:04:43
再随机生成一个n*1的矩阵D,若$A*B=C$,则显然有$A*B*D=C*D$,根据结合律,又有$A*(B*D)=C*D$ 由于(n*n)*(n*1)的复杂度是$o(n^2)$的,因此暴力乘法即可 (程序的做法是判断乘起来的矩阵所有数字之和与C是否相同,即求$a[i][k]*b[k][j]$,对a的每一列预处理求和,然后就可以快速计算 1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,x,s[1005]; 4 long long ans; 5 int main(){ 6 while (scanf("%d",&n)!=EOF){ 7 memset(s,0,sizeof(s)); 8 ans=0; 9 for(int i=1;i<=n;i++) 10 for(int j=1;j<=n;j++){ 11 scanf("%d",&x); 12 s[j]+=x; 13 } 14 for(int i=1;i<=n;i++) 15 for(int j=1;j<=n;j++){ 16 scanf("%d",&x); 17 ans+=x*s[i]; 18 } 19 for(int i=1;i<=n;i++) 20 for(int j=1;j<=n;j++){ 21 scanf("%d",&x); 22 ans-=x; 23 } 24

高数 矩阵的基本运算

旧城冷巷雨未停 提交于 2019-12-04 11:39:36
一、介绍 1、介绍。 矩阵的运算,本质上就是二维数组的运算。 2、公共代码。 /** * 打印二维数组 * * @param a 二维数组a */ public static void print ( double [][] a) { print(a, 5 , 0 ); } /** * 打印二维数组 * * @param a 二维数组a * @param precision 如果是浮点型的话,保留几位小数 */ public static void print ( int [][] a, int width, int precision) { String str = "%" + width + "d " ; for ( int i = 0 ; i < a.length; i++) { int [] aItem = a[i]; for ( int j = 0 ; j < aItem.length; j++) { System.out.print(String.format(str, aItem[j])); } System.out.println(); } } /** * 打印二维数组 * * @param a 二维数组a * @param precision 如果是浮点型的话,保留几位小数 */ public static void print ( double [][] a,

Basic

这一生的挚爱 提交于 2019-12-04 08:08:16
Basic %% % 获得函数帮助说明 help randi %% result=[log(2.7),log2(2),log10(10),exp(1)]; disp(result) % 2*3:[0,1]间均匀分布矩阵 rand(2,3) % 3*3:[0,1]间均匀分布矩阵 rand(3) % randi([min,max],m,n):m*n均匀分布随机数矩阵,含两端 choic=randi([0,2],1,4) % 复数 2+i*4 %% % 运算优先级:() > ^ > * / > + - % 变量使用前无需申明 % 数字默认double 类型 % i,j 指向复数的虚部 i j % 无穷大 Inf % log(0) eps % not a number NaN pi % 指向最近一个匿名结果 ans % 变量优先级:变量>内建函数>子函数 cos='string' cos(3) %'r' %% % 格式化输出,四舍五入式 % format bank:2位小数, short:4位小数,long :15位小数,shortE:short 的科学计数法形式,longE:long的科学计数法形式 % format hex:16进制,rat:分数形式 format bank a=12/6.5 %% a=[1,2,3];% 行向量 b=[1;2;3];%列向量 a*b% 矩阵乘法 %%