numpy将所有数据变为0和1_Numpy基础总结
resize和reshape都可以改变ndarray的结构,但resize会对原值进⾏修改,返回None,⽽reshape不会对原值进⾏修改,返回是修改后结果。
importnumpy as np
arr= np.arange(15).reshape(3, 5)
arr
array([[ 0,1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
zeros
⽣成指定结构的默认为 0. 的 array
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
ones
⽣成⼀个三维的 array,通过 dtype 指定类型
array([[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]],
[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]]])
arange
指定范围和数值间的间隔⽣成 array,注意范围包左不包右
np.arange(0,10,2)
array([0,2, 4, 6, 8])
linespace 随机数
⽣成等差数列
>>> np.linspace(0,10) # 默认⽣成50个值
array([ 0. ,0.20408163, 0.40816327, 0.6122449 , 0.81632653,1.02040816, 1.2244898 , 1.42857143, 1.63265306, 1.83673469,2.04081633, 2.24489796, 2.44897959, 2.65306122, 2.85714286,3.06122449, 3.26530612,
3.46938776, 3.67346939, 3.87755102,
4.08163265, 4.28571429, 4.48979592, 4.69387755,
4.89795918,
5.10204082, 5.30612245, 5.51020408, 5.71428571, 5.91836735,
6.12244898, 6.32653061,
6.53061224, 6.73469388, 6.93877551,
7.14285714, 7.34693878, 7.55102041, 7.75510204,
7.95918367,8.16326531, 8.36734694, 8.57142857, 8.7755102 , 8.97959184,9.18367347, 9.3877551 ,
9.59183673, 9.79591837, 10. ])>>> np.linspace(1,20,10,dtype=int) 可指定区间范围,个数,和类型
array([1, 3, 5, 7, 9, 11, 13, 15, 17, 20])
random 随机数
⽣成指定结构的随机数,可以⽤于⽣成随机权重,⽤法和Python的random模块基本⼀致
np.random.random((2,3))
array([[0.86166627, 0.37756207, 0.94265883],
[ 0.9768257 , 0.96915312, 0.33495431]])
>>> li = list(range(0,10))
>>>li
[0,1, 2, 3, 4, 5, 6, 7, 8, 9]>>>np.random.shuffle(li)>>>li
[5, 6, 8, 2, 1, 3, 9, 4, 0, 7]>>>np.random.choice(li)2
>>> np.random.sample(3)
array([0.41578646, 0.4275044 , 0.46925681])>>> np.random.choice(5,2)
array([4, 4])>>> np.random.choice(li,5)
array([3, 3, 4, 5, 0])>>>np.random.rand() # 0-1随机数0.5526940210685204
>>>np.random.randn() # 标准正态分布-1.3879406767054916
>>> np.random.rand(4,2)
array([[0.76781829, 0.98909192],
[0.56726061, 0.48113612],
[0.52529073, 0.00218226],
[0.5546019 , 0.29870287]])>>> np.random.randn(4,2)
array([[-0.68062491, 0.46315132],
[-0.13610026, -0.72371849],
[-1.15933349, -0.92001229],
[0.79173944, -1.29063009]])>>> np.random.randint(4) # 随机整数1
>>> np.random.randint(0,10,4) # 0-10的随机整数
array([6, 9, 1, 1])>>> np.random.seed(3)>>>np.random.random()0.5507979025745755
>>>np.random.random()0.7081478226181048
>>> np.random.seed(3)>>>np.random.random()0.5507979025745755
五、ndarray 运算
元素之间依次相减相减
a = np.array([10,20,30,40])
b= np.array(4)
a-b
array([6, 16, 26, 36])
乘⽅
a**2array([ 100, 400, 900, 1600])
开根号
np.sqrt(B)
array([[1.41421356, 0. ],
[ 1.73205081, 2. ]])
e 求⽅
array([[7.3890561 , 1. ],
[ 20.08553692, 54.59815003]])
向下取整
a = np.floor(10*np.random.random((2,2))) a
array([[ 0., 0.],
[3., 6.]])
⾏列变换
a.T
array([[ 0.,3.],
[ 0., 6.]])
变换结构
a
array([[ 0., 0.,3., 6.]])
六、 矩阵运算
矩阵之间的运算
A = np.array( [[1,1],
[0,1]] )
B= np.array( [[2,0],
[3,4]] )python生成1到100之间随机数
*运算
对于ndarray, * 作⽤的是进⾏element-wise乘积,必要时需要broadcast,作⽤同np.multipy
>>> a = np.array(range(6)).reshape((2,3))
>>> b = np.array([1,0,1])
>>> a
array([[0, 1, 2], [3, 4, 5]])
>>> b
array([1, 0, 1])
>>> c= a*b
>>> c
array([[0, 0, 2], [3, 0, 5]])
>>> d = a*b.T
>>> d
array([[0, 0, 2], [3, 0, 5]])
⽽对于matrix,* 则表⽰矩阵相乘,运算必须保证矩阵相乘的法则:
>>> A=np.matrix(a)>>> B=np.matrix(b)>>>A
matrix([[0,1, 2],
[3, 4, 5]])>>>B
matrix([[1, 0, 1]])>>> C=A*B
ValueError: shapes (2,3) and (1,3) not aligned: 3 (dim 1) != 1(dim 0)#维数不匹配
>>> C=A*B.T>>>C
matrix([[2],
[8]])
dot运算
如果 a 和 b都是 1-D arrays,它的作⽤是计算内积。(不进⾏复共轭)
>>> np.dot(3, 4)12
>>> np.dot([2j, 3+3j], [2j, 3j])
(-13+9j)
如果 a 和 b 是 2-D arrays, 作⽤是矩阵的乘积, a 和 b的维数要满⾜矩阵乘积维数要求,此时推荐使⽤ matmul 或 a @ b 。>>> a = [[1, 0], [0, 1]]>>> b = [[4, 1], [2, 2]]>>>np.dot(a, b)
array([[4, 1],
[2, 2]])
如果 a 或 b 是 0-D (标量), 等价于 multiply ,推荐使⽤ numpy.multiply(a, b)或 a * b。
如果 a 是 N-D array 且 b 是 1-D array, 作⽤是在a 和 b的最后⼀个轴上进⾏sum product运算。
>>> a = array([[[ 1., 2., 3., 4.],
[5., 6., 7., 8.],
[9., 10., 11., 12.]],
[[1., 2., 3., 4.],
[5., 6., 7., 8.],
[9., 10., 11., 12.]]])>>> b = np.array([1,2,3,4])>>>np.dot(a, b)
array([[30., 70., 110.],
[30., 70., 110.]])
如果a 是 N-D array 且 b 是 M-D array (M>=2), 作⽤是在a的最后⼀个轴上和b的倒数第⼆个轴上进⾏sum product,即 :
dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])
>>> 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
multiply运算
函数原型是
numpy.multiply(x1, x2, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj]) =
Returns:
y : ndarray
x1 和 x2的element-wise乘积,保证x1和x2有相同的维数,或者进⾏broadcast之后两者有相同的维数
>>> np.multiply(2.0, 4.0)8.0
>>> x1 = np.arange(9.0).reshape((3, 3))>>> x2 = np.arange(3.0)>>>np.multiply(x1, x2)
array([[ 0.,1., 4.],
[ 0.,4., 10.],
[ 0.,7., 16.]])#要进⾏broadcast
横向堆叠
a = np.floor(10*np.random.random((2,2)))
b= np.floor(10*np.random.random((2,2)))print(a)print(b)print(np.hstack((a,b)))
[[2. 3.]
[ 9. 3.]]
[[ 8. 1.]
[ 0. 0.]]
[[ 2. 3. 8. 1.]
[ 9. 3. 0. 0.]]
纵向堆叠
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论