python3 numpy中数组相乘np.dot(a,b)运算的规则说明

python np.dot(a,b)运算规则解析

首先我们知道dot运算时不满足交换律的,np.dot(a, b)与np.dot(b, a)是不一样的

另外np.dot(a,b)和a.dot(b)果是一样的

1.numpy中数组相乘np.dot(a,b)运算条件:

对于两数组a和b :

示例一:

a = np.array([[3], [3], [3]]) # (3,1)
b = np.array([2, 2, 1]) # (3,)
print(a, "\na的shape", a.shape)
print(b, "\nb的shape", b.shape)
c = b.dot(a)
print(c, "\nc的shape", c.shape)

输出:

 [3]
 [3]]
a的shape (3, 1)
[2 2 1]
b的shape (3,)
[15]
c的shape (1,)

示例二:

a = np.array([[2,2,2,1],[3,3,3,1],[4,4,4,4]]) # shape=(3,4)
b = np.array([[1,1,1],[2,2,2],[3,3,3],[4,4,4]]) # shape=(4,3)

可以直接看他们的shape:a的shape为(3, 4)设为(m, n);b的shape为(4, 3)设为(x, y)

对于上面两个数组a,b:

np.dot(a,b)的运算条件为:n==x,如果a的shape变为(4, 3)则两则无法dot

简单来说规律就是:如果a.shape=(m,n),b.shape=(x,y)那么**np.dot(a,b)**的运算条件为:n=x (这一点用于在python理解和快速判断数组的shape是否用对了)

实际上数组运算的规律将两个数组画出来,是这样的:

2.np.dot(a,b)运算之后的结果解析

规律:dot之后会将两组数组中相等的(符合dot条件的)维度消掉,得到剩下的维度组合成新的数组,如果剩下只有一个维度则为行(对应一维),列是无

对于a.shape=(m,n),b.shape=(x,y):

dot之后n和x会消掉,结果shape变成(m,y)

如果n为1(或者空),shape变为(y,)

e.g1:

a = np.array([1,1,1]) # shape=(3,)
b = np.array([[3],[3],[3]]) # shape=(3,1)
print(np.dot(a,b))
print("dot之后的shape为:", np.dot(a,b).shape)

那么,3和3消掉,剩下只有一个数1,对应1行没有列==>(1,)

运算结果:

[9]
dot之后的shape为:(1,)

e.g2:

a.shape=(4,1)
b.shape=(1,4)

那么( 1和1消掉,剩下(4,4) )

np.dot(a,b)的shape为(4,4)

补充:Python3中的列表、数组和矩阵及*、np.dot和np.multiply解析

今天用Python进行数据处理的时候,突然发现自己搞不清Python中的列表和数组有啥区别及其运算规则,总是得不到自己想要的结果。于是就开始在网上找相关资料,发现很多资料讲的都十分片面,下面自己总结的各个资料,给大家进行详细的解释:

1.列表、数组和矩阵

列表是Python中最基本的数据结构,列表中可以存储数字、字符串等,因此Python可以通过列表存储数组;

数组是Python扩展库Numpy中的一种数据结构ndarray;

矩阵是同样是Python扩展库Numpy中的一种数据结构mat;

那么既然存在列表,为什么我们不直接使用Python中的列表,而使用Numpy呢?原因显然意见,Python中列表的存储效率和输入输出性能远不及Numpy中的数组和矩阵,但是由于列表中可以存储任意元素,因此列表的通用性方面要比数组和矩阵强。总之列表与数组、矩阵各有各的优势,要视使用场合选择合适的数据结构。

同样Numpy中的数组和矩阵也是有区别的:

Numpy中的矩阵必须是2维的,而Numpy中数组可以是多维的,因此矩阵是数组的一个特例,所以在Numpy中的矩阵继承着数组的所有特性;

同时我们常常需要查看列表、数组和矩阵的属性,如size、shape、len

其中len():返回对象的长度,可以作用于列表、数组和矩阵:len(list([1,2,3]))

size()和shape()是Numpy扩展库中才用的函数:

size():计算所有数据的个数,同样可以作用于列表、数组和矩阵:np.size(np.array([1,2,3]))

shape():得到数据每维的大小,同样可以作用于列表、数组和矩阵:np.shape(np.array([1,2,3]))

不同于len,shape和size还可以作为数组和矩阵的属性(列表不行),使用方法如下:a.shape、a.size

2.Python中的星号(*)、np.multiply()、np.dot()

1.星号(*):

对数组执行对应位置相乘;对矩阵执行矩阵乘法运算

2.np.multiply()

不管对矩阵还是数组都是执行对应位置相乘

3.np.dot()

对秩为1的数组:对应位置相乘并求和

对秩不为1的数组:矩阵乘法运算

对矩阵:矩阵乘法运算

上面是对列表、数组、矩阵以及Python中各种乘法的总结,果然总结对自己理解问题有很大的帮助,现在自己自己很清楚它们的用法了,希望这篇博客也可以帮助大家~

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • 细说NumPy数组的四种乘法的使用

    当孔乙己说回字有四样写法的时候,相信各位都是这样的表情吧? 但是,如果孔乙己说NumPy数组有四种乘法的时候,各位大约就是这样的表情了吧? 实际上,NumPy数组乘法远不止四种.为了在写作和阅读时保持清晰的逻辑和清醒的头脑,本文仅对四种最常见的数组乘法给出详细说明,并用一道数学题来演示向量点乘和叉乘的用法. 1. 星乘(*) 先声明一下:星乘这个说法,是我自己创造的,因为我实在不知道数组的这种乘法有没有其他高大上的名字,只好用运算符来表示了.所谓数组星乘,就是数组的对应元素相乘,这也是初学Num

  • python中数组和矩阵乘法及使用总结(推荐)

    Matrix是Array的一个小的分支,包含于Array.所以matrix 拥有array的所有特性. 但在数组乘和矩阵乘时,两者各有不同,如果a和b是两个matrices,那么a*b,就是矩阵积 如果a,b是数组的话,则a*b是数组的运算 1.对数组的操作 >>> import numpy as np >>> a=np.array([[1,2,3],[4,5,6],[7,8,9]]) >>> a array([[1, 2, 3], [4, 5, 6]

  • Python 实现两个列表里元素对应相乘的方法

    方法一: 结合zip函数,使用map函数: List1 = [1,2,3,4] List2 = [5,6,7,8] List3 = map(lambda (a,b):a*b,zip(List1,List2)) print List3 方法二: 把列表转化为数组,使用np.multiply函数 List = [1,2,3] List2 = [5,6,7] List3 = np.multiply(np.array(List1),np.array(List2)) print List3.tolist(

  • python3 numpy中数组相乘np.dot(a,b)运算的规则说明

    python np.dot(a,b)运算规则解析 首先我们知道dot运算时不满足交换律的,np.dot(a, b)与np.dot(b, a)是不一样的 另外np.dot(a,b)和a.dot(b)果是一样的 1.numpy中数组相乘np.dot(a,b)运算条件: 对于两数组a和b : 示例一: a = np.array([[3], [3], [3]]) # (3,1) b = np.array([2, 2, 1]) # (3,) print(a, "\na的shape", a.sha

  • numpy中数组拼接、数组合并方法总结(append(), concatenate, hstack, vstack, column_stack, row_stack, np.r_, np.c_等)

    目录 零. 维度和轴 一.append() 二.concatenate 三.hstack, vstack 四.column_stack, row_stack 五. np.r_, np.c_ 六.总结 参考 总结 零. 维度和轴 Python中可以用numpy中的ndim和shape来分别查看维度,以及在对应维度上的长度.直观上可以根据符号“[ ]”的层数来判断,有m层即为m维,最外面1层对应axis0, 依次为axis1,axis2… c = np.array([[[1,2,3], [4,5,6

  • 对numpy中数组转置的求解以及向量内积计算方法

    有点抱歉的是我的数学功底确实是不好,经过了高中的紧张到了大学之后松散了下来.原本高中就有点拖后腿的数学到了大学之后更是一落千丈.线性代数直接没有学明白,同样没有学明白的还有概率及统计以及复变函数.时至今日,我依然觉得这是人生中让人羞愧的一件事儿.不过,好在我还有机会,为了不敷衍而去学习一下. 矩阵的转置有什么作用,我真是不知道了,今天总结完矩阵转置的操作之后先去网络上补充一下相关的知识. 今天的代码操作如下: In [15]: arr1 = np.arange(20) In [16]: arr1

  • 对numpy中数组元素的统一赋值实例

    Numpy中的数组整体处理赋值操作一直让我有点迷糊,很多时候理解的不深入.今天单独列写相关的知识点,进行总结一下. 先看两个代码片小例子: 例子1: In [2]: arr =np.empty((8,4)) In [3]: arr Out[3]: array([[ 0., 0., 0., 0.], [ 0., 0., 0., 0.], [ 0., 0., 0., 0.], [ 0., 0., 0., 0.], [ 0., 0., 0., 0.], [ 0., 0., 0., 0.], [ 0.,

  • 详谈Numpy中数组重塑、合并与拆分方法

    1.数组重塑 1.1一维数组转变成二维数组 通过reshape( )函数即可实现,假设data是numpy.array类型的一维数组array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]),现将其转变为2行5列的二维数组,代码如下: data.reshape((2,5)) 作为参数的形状的其中一维可以是-1,它表示该维度的大小由数据本身推断而来,因此上面代码等价于: data.reshape((2,-1)) 1.2二维数组转换成一维数组 将多维数组转换成一维数组的运算通常称为扁

  • 在Python3 numpy中mean和average的区别详解

    mean和average都是计算均值的函数,在不指定权重的时候average和mean是一样的.指定权重后,average可以计算一维的加权平均值. 具体如下: import numpy as np a = np.array([np.random.randint(0, 20, 5), np.random.randint(0, 20, 5)]) print('原始数据\n', a) print('mean函数'.center(20, '*')) print('对所有数据计算\n', a.mean(

  • 基于numpy中数组元素的切片复制方法

    代码1: #!/usr/bin/python import numpy as np arr1 = np.arange(10) print(arr1) slice_data = arr1[3:5] print(slice_data) slice_data[0] = 123 print(slice_data) print(arr1) 类似的代码之前应用过,简单看了一下numpy中的数组切片. 程序的执行结果如下: In [2]: %run exp01.py [0 1 2 3 4 5 6 7 8 9]

  • Python Numpy中数组的集合操作详解

    我们知道两个 set 对象之间,可以取交集.并集.差集.对称差集,举个例子: s1 = {1, 2, 3} s2 = {2, 3, 4} """ &: 交集 |: 并集  -: 差集 ^: 对称差集 """ # 以下几种方式是等价的 # 但是一般我们都会使用操作符来进行处理,因为比较方便 print(s1 & s1) print(s1.intersection(s2)) print(set.intersection(s1, s2)

  • Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换实例

    Numpy matrix 必须是2维的,但是 numpy arrays (ndarrays) 可以是多维的(1D,2D,3D····ND),matrix是Array的一个小的分支,包含于Array. import numpy as np >>> m = np.mat([[1,2],[3,4]]) >>> m[0] #读取一行 matrix([[1, 2]]) >>> m[:,0] #读取一列 matrix([[1], [3]]) numpy中数组和矩阵

  • 基于Python Numpy的数组array和矩阵matrix详解

    NumPy的主要对象是同种元素的多维数组.这是一个所有的元素都是一种类型.通过一个正整数元组索引的元素表格(通常是元素是数字). 在NumPy中维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank,但是和线性代数中的秩不是一样的,在用python求线代中的秩中,我们用numpy包中的linalg.matrix_rank方法计算矩阵的秩,例子如下). 结果是: 线性代数中秩的定义:设在矩阵A中有一个不等于0的r阶子式D,且所有r+1阶子式(如果存在的话)全等于0,那末D称为矩阵

随机推荐