科学计算库Numpy-常用函数

假定所有操作都事先导入numpy库

import numpy as np

1、平方根和次方根

B = np.array([0, 1, 2])
print(B)
print('----------')
#计算e的次方
print(np.exp(B))
print('----------')
#计算次方根
print(np.sqrt(B))

结果为:

[0 1 2]
----------
[ 1.          2.71828183  7.3890561 ]
----------
[ 0.          1.          1.41421356]

2、向下取整

a = np.floor(10 * np.random.random((3, 4)))
print(a)

结果为:

[[ 6.  8.  1.  7.]
 [ 2.  2.  2.  7.]
 [ 7.  1.  5.  7.]]

3、矩阵与向量的相互转换和矩阵的转置

print(a.ravel())
print('----------')
#向量转换为矩阵
a.shape = (6, 2)
print(a)
print('----------')
#矩阵转置
print(a.T)

结果为:

[ 6.  8.  1.  7.  2.  2.  2.  7.  7.  1.  5.  7.]
----------
[[ 6.  8.]
 [ 1.  7.]
 [ 2.  2.]
 [ 2.  7.]
 [ 7.  1.]
 [ 5.  7.]]
----------
[[ 6.  1.  2.  2.  7.  5.]
 [ 8.  7.  2.  7.  1.  7.]]

4、矩阵的拼接

a = np.floor(10 * np.random.random((2, 2)))
b = np.floor(10 * np.random.random((2, 2)))
print(a)
print('----------')
print(b)
print('----------')
#按行拼接
print(np.vstack((a, b)))
print('----------')
#按列拼接
print(np.hstack((a, b)))

结果为:

[[ 0.  9.]
 [ 8.  0.]]
----------
[[ 5.  9.]
 [ 1.  3.]]
----------
[[ 0.  9.]
 [ 8.  0.]
 [ 5.  9.]
 [ 1.  3.]]
----------
[[ 0.  9.  5.  9.]
 [ 8.  0.  1.  3.]]

5、矩阵的切分

a = np.floor(10 * np.random.random((2, 12)))
print(a)
print('----------')
#按列把a平均切成2份
print(np.hsplit(a, 2))
print('----------')
#按行把a平均切成2份
print(np.vsplit(a, 2))
print('----------')
#在特定位置进行切分(第3列和第7列)
print(np.hsplit(a, (3, 7)))

结果为:

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

6、变量赋值

#①赋ID,共用同一个ID,两者除变量名不同外完全相同
a = np.arange(12)
b = a
print(a is b)
b.shape = 3, 4
print(a.shape)
print(id(a))
print(id(b))
print('----------')
#②浅复制,不同的ID,但共用一组数据
c = a.view()
print(c is a)
c.shape = 2,6
print(a.shape)
c[0, 4] = 1234
print(a)
print(id(a))
print(id(c))
print('----------')
#③深复制,两个变量完全独立,相互无影响
d = a.copy()
print(a is d)
d[0, 0] = 999
print(a)
print(id(a))
print(id(d))

结果为:

True
(3, 4)
1981659786576
1981659786576
----------
False
(3, 4)
[[   0    1    2    3]
 [1234    5    6    7]
 [   8    9   10   11]]
1981659786576
1981659737904
----------
False
[[   0    1    2    3]
 [1234    5    6    7]
 [   8    9   10   11]]
1981659786576
1981659786336

7、最值

data = np.sin(np.arange(20)).reshape(5,4)
print(data)
print('----------')
#按列返回最大值的索引
ind = data.argmax(axis = 0)
print(ind)
print('----------')
data_max = data[ind, range(data.shape[1])]
print(data_max)

结果为:

[[ 0.          0.84147098  0.90929743  0.14112001]
 [-0.7568025  -0.95892427 -0.2794155   0.6569866 ]
 [ 0.98935825  0.41211849 -0.54402111 -0.99999021]
 [-0.53657292  0.42016704  0.99060736  0.65028784]
 [-0.28790332 -0.96139749 -0.75098725  0.14987721]]
----------
[2 0 3 1]
----------
[ 0.98935825  0.84147098  0.99060736  0.6569866 ]

8、矩阵扩充

a = np.arange(0, 40, 10)
print(a)
#将矩阵扩充为2行2列,每个元素的值都为a
b = np.tile(a, (2, 2))
print(b)

结果为:

[ 0 10 20 30]
[[ 0 10 20 30  0 10 20 30]
 [ 0 10 20 30  0 10 20 30]]

9、排序

a = np.array([[4, 3, 5],[1, 2, 1]])
print(a)
print('----------')
#按行进行顺序排序
b = np.sort(a, axis = 1)
print(b)
#等同于
#a.sort(axis = 1)
#print(a)
print('----------')
a = np.array([5, 3, 1, 2])
#返回顺序排序后的元素索引值
j = np.argsort(a)
print(j)
print('----------')
#进行顺序排序
print(a[j])

结果为:

[[4 3 5]
 [1 2 1]]
----------
[[3 4 5]
 [1 1 2]]
----------
[2 3 1 0]
----------
[1 2 3 5]

另附:
科学计算库Numpy-数据结构
科学计算库Numpy-数据操作
科学计算库Numpy-矩阵属性
科学计算库Numpy-矩阵操作

你可能感兴趣的:(#,数据分析)