2.1、np.dot()函数
numpy.dot(a, b, out=None)两个数组的点积。
np.dot()计算规则:np.dot(a, b, out=None):
一、一维数组
np.dot(3, 4)
>>>
12
np.dot([2, 3], [4, 4])
>>>
20
二、二维数组
a = [[1, 0], [0, 1]]
b = [[4, 1], [2, 2]]
np.dot(a, b)
>>>
array([[4, 1],
[2, 2]])
三、n维数组
a = np.arange(6).reshape(1, 2, 3)
b = np.arange(6).reshape(2, 3, 1)
a
>>>
array([[[0, 1, 2],
[3, 4, 5]]])
b
>>>
array([[[0],
[1],
[2]],
[[3],
[4],
[5]]])
# 计算n维数组数组的点积
np.dot(a, b)
>>>
array([[[[ 5],
[14]],
[[14],
[50]]]])
2.2 numpy.outer()计算两个向量的外积
numpy.outer(a, b, out=None)计算两个向量的外积。
np.outer()表示的是两个向量相乘,拿第一个向量的元素分别与第二个向量所有元素相乘得到结果的一行。
典型范例:
import numpy as np
lr = np.outer(np.ones((5,)),np.linspace(-2,2,5))
lr
>>>
array([[-2., -1., 0., 1., 2.],
[-2., -1., 0., 1., 2.],
[-2., -1., 0., 1., 2.],
[-2., -1., 0., 1., 2.],
[-2., -1., 0., 1., 2.]])
其中,
np.ones((5,))
>>>
array([1., 1., 1., 1., 1.])
np.linspace(-2,2,5)
>>>
array([ 2., 1., 0., -1., -2.])
im = np.outer(1j*np.linspace(2,-2,5),np.ones((5,)))
im
>>>
array([[0.+2.j, 0.+2.j, 0.+2.j, 0.+2.j, 0.+2.j],
[0.+1.j, 0.+1.j, 0.+1.j, 0.+1.j, 0.+1.j],
[0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j],
[0.-1.j, 0.-1.j, 0.-1.j, 0.-1.j, 0.-1.j],
[0.-2.j, 0.-2.j, 0.-2.j, 0.-2.j, 0.-2.j]])
其中,
1j*np.linspace(2,-2,5) # 可将【1j】看做一个【有系数项的向量】,【*np.linspace(2,-2,5)】相当于改变该向量的【系数项】
>>>
array([ 0.+2.j, 0.+1.j, 0.+0.j, -0.-1.j, -0.-2.j])
grid = lr + im
grid
>>>
array([[-2.+2.j, -1.+2.j, 0.+2.j, 1.+2.j, 2.+2.j],
[-2.+1.j, -1.+1.j, 0.+1.j, 1.+1.j, 2.+1.j],
[-2.+0.j, -1.+0.j, 0.+0.j, 1.+0.j, 2.+0.j],
[-2.-1.j, -1.-1.j, 0.-1.j, 1.-1.j, 2.-1.j],
[-2.-2.j, -1.-2.j, 0.-2.j, 1.-2.j, 2.-2.j]])
# 使用字母”矢量“的示例:
np.outer(np.array(['a','b','c']), [1,2,3])
>>>
x = np.array(['a','b','c'], dtype=object)
x
>>>
array(['a', 'b', 'c'], dtype=object) # 备注:np.array(['a','b','c'])输出:array(['a', 'b', 'c'], dtype='<U1')无法参与运算
np.outer(x, [1,2,3])
>>>
array([['a', 'aa', 'aaa'],
['b', 'bb', 'bbb'],
['c', 'cc', 'ccc']], dtype=object