目录
W = np.random.randn(2,2,3,8)
np.shape(W) # (2,2,3,8)
element-wise product
https://docs.scipy.org/doc/numpy/reference/generated/numpy.multiply.html
>>> x1 = np.arange(9.0).reshape((3, 3))
>>> x1
array([[ 0., 1., 2.],
[ 3., 4., 5.],
[ 6., 7., 8.]])
>>> x2 = np.arange(3.0)
>>> x2
array([ 0., 1., 2.])
>>> np.multiply(x1, x2)
array([[ 0., 1., 4.],
[ 0., 4., 10.],
[ 0., 7., 16.]])
点乘
https://docs.scipy.org/doc/numpy/reference/generated/numpy.dot.html
具体地:
dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])
对于两个2D-array而言,就是矩阵乘法(最好使用matmul):
>>> a = [[1, 0], [0, 1]]
>>> b = [[4, 1], [2, 2]]
>>> np.dot(a, b)
array([[4, 1],
[2, 2]])
而
>>> a = np.arange(3 * 4 * 5 * 6).reshape((3,4,5,6))
>>> b = np.arange(3 * 4 * 5 * 6)[::-1].reshape((5,4,6,3))
>>> np.dot(a, b)[2,3,2,1,2,2]
499128
>>> sum(a[2,3,2,:] * b[1,2,:,2])
499128
矩阵乘法
https://docs.scipy.org/doc/numpy/reference/generated/numpy.matmul.html#numpy.matmul
Multiplication by a scalar is not allowed, use *
instead
matmul和dot的区别:
>>> a = [[1, 0], [0, 1]]
>>> b = [[4, 1], [2, 2]]
>>> np.matmul(a, b)
array([[4, 1],
[2, 2]])
从数组的形状中删除单维度条目,即把shape中为1的维度去掉
参考https://blog.csdn.net/zenghaitao0128/article/details/78512715
numpy.squeeze(a,axis = None)
输入:
返回值:数组,不会修改原数组。
场景:在机器学习和深度学习中,通常算法的结果是可以表示向量的数组(即包含两对或以上的方括号形式[[]]
),如果直接利用这个数组进行画图可能显示界面为空(见后面的示例)。我们可以利用squeeze
函数将表示向量的数组转换为秩为1的数组,这样利用matplotlib库函数画图时,就可以正常的显示结果了。
例如:
import numpy as np
squares =np.array([[1,4,9,16,25]])
squares.shape
# (1, 5)
np.squeeze(squares).shape
# (5,)