矩阵乘法和点乘总结
Matlab | Python Numpy array | Python Numpy matrix | |
---|---|---|---|
矩阵乘法 | * | np.dot() | np.dot() 和 * |
点乘 | . * | np.multiply() 和 * | np.multiply() |
1. python中和矩阵有关的数据类型有如下几种:
1.1 python列表(list)
两个列表点乘的实现: 结合zip函数,使用map函数:
#这段代码需要使用python2运行,如果使用python3运行报错
List1 = [1,2,3,4]
List2 = [5,6,7,8]
List3 = map(lambda (a,b):a*b,zip(List1,List2))
print List3
1.2 python数组(array)
当我们需要1000万个浮点数的时候,数组(array)的效率要比列表(list)要高得多,因为数组在背后存的并不是float对象,而是数字的机器翻译,也就是字节表述。这一点和c语言中的数组一样。
1.3 numpy中的数组(array)
numpy数组和python列表的区别
(a)、numpy数组创建时是固定大小,python列表(list)是动态的。更改ndarray的大小将创建一个新数组并删除原来的数组。
(b)、元素类型区别。
NumPy数组中的元素都需要具有相同的数据类型,因此在内存中的大小相同。
python的List可以存放不同类型的元素。
例外情况:Python的原生数组里包含了NumPy的对象的时候,这种情况下就允许不同大小元素的数组。
(c)、数学操作执行效率高于原生python
(d)、越来越多的基于Python的科学和数学软件包使用NumPy数组
1.4 numpy中的矩阵(matrix)
numpy中数组array和矩阵matrix的区别:
matrix是array的分支,matrix和array在很多时候都是通用的,你用哪一个都一样。但这时候,官方建议大家如果两个可以通用,那就选择array,因为array更灵活,速度更快,很多人把二维的array也翻译成矩阵。
但是matrix的优势就是相对简单的运算符号,比如两个矩阵相乘,就是用符号*,但是array相乘不能这么用,得用方法.dot()
array的优势就是不仅仅表示二维,还能表示3、4、5…维,而且在大部分Python程序里,array也是更常用的。
2. Python中的矩阵乘法和矩阵点乘
2.1 numpy中的array
np.dot()表示矩阵相乘。 *表示点乘。np.multiply()表示点乘
import numpy as np
a = np.array([[1, 0], [0, 1]])
b = np.array([[4, 1], [2, 2]])
x = np.dot(a, b) # 矩阵相乘
y = a*b # 点乘
z = np.multiply(a, b) # 点乘
print(x)
print(y)
print(z)
[[4 1]
[2 2]]
[[4 0]
[0 2]]
[[4 0]
[0 2]]
2.1 numpy中的matrix
np.dot()表示矩阵相乘。 *表示矩阵相乘。np.multiply()表示点乘
import numpy as np
a = np.mat([[1, 0], [0, 1]])
b = np.mat([[4, 1], [2, 2]])
x = np.dot(a, b) # 矩阵相乘
y = a*b # 矩阵相乘
z = np.multiply(a, b) # 点乘
print(x)
print(y)
print(z)
[[4 1]
[2 2]]
[[4 1]
[2 2]]
[[4 0]
[0 2]]
3. matlab中的矩阵乘法和矩阵点乘
a=[[1, 0]; [0, 1]]
b=[[4, 1]; [2, 2]]
x=a*b %矩阵乘法,要求乘号左边的矩阵的列数 等于 乘号右边的矩阵的行数。
y=a.*b % 矩阵点乘,即每个元素对应相称。要求输入的两个矩阵形状相同。
x =
4 1
2 2
y =
4 0
0 2