numpy的常用方法5-5

numpy的常用函数

e的次方和n的开根号

B = np.arange(3)
print(np.exp(B)) #e的n次方
print(np.sqrt(B)) #对n开几次方
 
#结果

[1.         2.71828183 7.3890561 ]  #e^0,e^1,e^2
[0.         1.         1.41421356]       #0^(1/2),1^(1/2),2^(1/2)

向下取整的floor

np.floor(10*np.random.random([10,10]))  #random在(0,1),向下取整

array([[8., 8., 7., 5., 5., 8., 2., 0., 4., 6.],
       [8., 8., 3., 5., 7., 6., 7., 1., 7., 7.],
       [7., 3., 9., 1., 0., 0., 6., 8., 8., 8.],
       [8., 9., 8., 5., 2., 8., 6., 1., 6., 1.],
       [7., 8., 0., 8., 1., 6., 8., 9., 3., 4.],
       [5., 5., 7., 0., 3., 0., 3., 3., 3., 1.],
       [0., 0., 7., 4., 9., 2., 4., 6., 2., 5.],
       [9., 9., 4., 3., 4., 1., 7., 6., 5., 4.],
       [6., 6., 7., 7., 1., 8., 7., 2., 8., 9.],
       [6., 7., 3., 8., 2., 1., 3., 8., 0., 7.]])

把矩阵变成向量的形式 ravel函数

np.ravel(  np.floor(10*np.random.random([10,10]))   )


#结果
array([9., 5., 4., 1., 1., 6., 3., 7., 3., 7., 6., 4., 9., 1., 9., 6., 4.,
       1., 5., 9., 9., 8., 5., 1., 6., 3., 0., 4., 7., 3., 1., 3., 9., 9.,
       1., 1., 9., 7., 5., 1., 6., 9., 3., 2., 3., 8., 2., 1., 1., 7., 5.,
       9., 2., 4., 7., 2., 8., 0., 5., 8., 2., 7., 5., 5., 7., 8., 7., 2.,
       4., 9., 8., 1., 0., 5., 5., 4., 5., 4., 8., 7., 1., 2., 2., 0., 6.,
       8., 9., 8., 4., 3., 3., 2., 0., 6., 8., 6., 3., 3., 6., 7.])

矩阵列合并和行合并
a= (np.floor(10*np.random.random([2,2])))  #array([[3., 6.], [9., 4.]])
b= (np.floor(10*np.random.random([2,2])))   #array([[4., 5.],[7., 9.]])


np.vstack((a,b)) #对矩阵上下相接

#结果
array([[3., 6.],
       [9., 4.],
       [4., 5.],
       [7., 9.]])

np.hstack((a,b)) #对矩阵左右相接

#结果
array([[3., 6., 4., 5.],
       [9., 4., 7., 9.]])

矩阵的分割

a=array([[3., 2., 2.],
       [8., 5., 7.],
       [8., 5., 0.]])
np.hsplit(a,3) #按照列分割成3块

#结果
[array([[3.], [8.],[8.]]),
 array([[2.],[5.],[5.]]),
 array([[2.],[7.],[0.]])]

np.hsplit(a,(1,2))  #在0,1,2  在1的前面切一刀和2的前面切一刀

#结果
[array([[3.],
        [8.],
        [8.]]), array([[2.],
        [5.],
        [5.]]), array([[2.],
        [7.],
        [0.]])]

np.vsplit(a,3)#按列切分

#结果
[array([[3., 2., 2.]]), array([[8., 5., 7.]]), array([[8., 5., 0.]])]

拷贝和引用的问题

a = np.arange(20) #b,a 是同一块内存地址的名字,如果改了a等于改b
b = a
print(b is a)
b.shape = 4,5
print(a)
print(id(a))
print(id(b))

#结果
True
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]]
4502961328
4502961328
c = a.view()   #浅拷贝  估计用的是统一块数据但是不同的变量地址指向的 所以 ID不同  不推荐使用
print(c is a)
c.shape = 5,4
print(a.shape)
c[0,3] = 1234
print(a)
print(c)
print(id(a))
print(id(c))


#结果
False
(4, 5)
[[   0    1    2 1234    4]
 [   5    6    7    8    9]
 [  10   11   12   13   14]
 [  15   16   17   18   19]]
[[   0    1    2 1234]
 [   4    5    6    7]
 [   8    9   10   11]
 [  12   13   14   15]
 [  16   17   18   19]]
4502961328
4503152160
d = a.copy()   #深拷贝 只把数据复制过来
d is a 
d[0,0] = 999
print(d)
print(a)

#结果
[[ 999    1    2 1234    4]
 [   5    6    7    8    9]
 [  10   11   12   13   14]
 [  15   16   17   18   19]]
[[   0    1    2 1234    4]
 [   5    6    7    8    9]
 [  10   11   12   13   14]
 [  15   16   17   18   19]]

numpy按列或者是按行查找最大值的索引

ma = np.random.random([3,4])
print(ma)

#结果:
[[0.14437194 0.88272108 0.94192143 0.27782676]
 [0.60407714 0.15106346 0.56248315 0.00709065]
 [0.11396868 0.10363129 0.15044116 0.77020605]]


ma.argmax(axis = 0) #axis 列指向 

#结果
array([1, 0, 0, 2])   #ma矩阵一共有四列,那么第一列当中最大值在1的位子,一次类推。 axis  =  1指的是行

tile填充

a = np.arange(0,20,10)
b = np.tile(a,(3,5))   #将向量填充到矩阵b中的每一个元素
print(b)

#结果
array([[ 0, 10,  0, 10,  0, 10,  0, 10,  0, 10],
       [ 0, 10,  0, 10,  0, 10,  0, 10,  0, 10],
       [ 0, 10,  0, 10,  0, 10,  0, 10,  0, 10]])

 

 

 

posted @ 2018-04-12 00:24  移动的城市  阅读(192)  评论(0)    收藏  举报