假定所有操作都事先导入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) 1 2
结果为:
[[ 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]