1.概述
1.np.array() # 将列表转换为数组
import numpy as np array = [1, 2, 3, 4, 5] array = np.array(array)
2..shape # 打印矩阵的维度, 也可以使用np.shape
import numpy as np array = [1, 2, 3, 4, 5] array = np.array(array) print(array.shape)
2.array 结构
3.dtype 打印数组的数据类型
import numpy as np tang_array = [1, 2, 3, 4] tang_array = np.array(tang_array) print(tang_array.dtype)
4. .itemsize # 判断数组中每一个数字所占的字节数
print(tang_array.itemsize)
5. .size # 打印出数组中的元素个数, 不关心矩阵的维度
print(tang_array.size)
6. .ndim # 打印数组中的维度信息
print(tang_array.ndim)
7. .fill(0) # 表示对当前数据进行填充,0表示填充的值
# .fill 对当前数据进行填充 tang_array = np.array([1, 2]) tang_array.fill(0) print(tang_array)
8. numpy索引与切片
tang_array = np.array([1, 2, 3, 4]) print(tang_array[0]) print(tang_array[-2:])
9 .copy # 进行浅拷贝
tang_array2 = tang_array.copy()
10 .dtype设置数组类型 将列表转换为bool值根据bool值进行取值操作
tang_array = np.arange(0, 100, 10) # 将列表转换为Bool值 bool_array = np.array([1, 0, 0, 1, 1, 1, 1, 0, 0, 0], dtype=bool) # 根据bool值进行取值 print(tang_array[bool_array])
11.根据大于或者小于获得bool值根据bool值进行取值操作
tang_array = np.random.rand(10) print(tang_array) bool_array = tang_array > 0.5 print(bool_array)
12. np.where 对bool值进行操作,获得True的索引值
tang_array = np.random.rand(10) bool_array = tang_array > 0.5 index = np.where(bool_array) print(index) print(tang_array[index])
13 .ndtype # 输出字节数
print(tang_array.nbytes)
14. .astype # 进行数据类型的转换,但是实际数据不发生改变
tang_array2 = tang_array.astype(np.float32) print(tang_array2.dtype)
15. np.object格式,保存了数据的原来格式
array = np.array([1, 10, 3.5, 'str'], dtype=np.object)
3.数值计算
16. .sum(axis=0) # 进行数组的加和操作
import numpy as np tang_array = np.array([[1, 2, 3], [4, 5, 6]]) # 对axis=0,进行行与行进行加和 print(tang_array.sum(axis=0)) # 进行所有数据的加和
print(tang_array.min(axis=0))
print(tang_array.sum()) print(tang_array.sum(axis=-1))
17. .prod(axis=0) # 进行数组之间的乘积操作,axis=0表示行与行之间进行乘积
print(tang_array.prod()) # 所有元素进行相乘操作
print(tang_array.prod(axis=1))
18. .min(axis=0) 找出数组中数据最小的值,axis=0表示找出每一列的最小值,从上到下的操作
print(tang_array.min(axis=0))
19 .max(axis=0) # 找出数组中数据最大值的操作
print(tang_array.max(axis=0))
20 .argmax(axis=1) # 找出数组中每一行的最大值的位置
print(tang_array.argmax(axis=1))
21 .mean(axis=1) # 找出数组中每一行均值的大小
print(tang_array.mean(axis=1))
22. std(axis=1) # 求出数组中每一行的标准差
print(tang_array.std(axis=1))
23. .var(axis=1) # 求出数组中每一行的方差
print(tang_array.var(axis=1))
24. .clip(2, 4)进行数据的范围限制, 小于2的用2表示,大于4的用4表示
print(tang_array.clip(2, 4))
25. .round(decimals=1) # 进行四舍五入,decimals表示保留小数点的后几位数
tang_array = np.array([1.12, 2.12, 3.12, 4.6]) print(tang_array.round(decimals=1))
4.排序
26. np.sort(value, axis=0)# 对数据进行排序操作
import numpy as np tang_array = np.array([[1.5, 1.3, 7.5], [5.6, 7.8, 1.2]]) # 对每一列进行排序 print(np.sort(tang_array, axis=0))
27. .argsort(axis=0) # 打印排序后的索引位置
print(tang_array.argsort(axis=0))
28. np.linspace(0, 10, 11) # 进行范围的数据拆分
tang_array = np.linspace(0, 10, 11)
29. np.searchsorted(tang, value) # 将value插入tang_array 返回的是插入后的索引值
print(np.searchsorted(tang_array, value))
30. np.lexsort # 指定列队数组进行排序操作
tang_array = np.array([[1, 0, 6], [2, 7, 0], [3, 3, 1], [2, 4, 0]]) index = np.lexsort([tang_array[:, 2]])
print(tang_array[index])
5-数组形状
31. np.reshape(value, (2, 5)) # 进行矩阵的维度变化
tang_array = np.arange(10) print(tang_array.shape) # 通过.shape改变数据的维度 tang_array.shape = 2, 5 print(np.reshape(tang_array, (2, 5))) print(tang_array)
32. np.newaxis # 表示增加一个矩阵维度
# 新增加一个维度 np.newaxis tang_array = np.array([[1, 2], [3, 4]]) tang_array = tang_array[:, :, np.newaxis] print(tang_array.shape)
33 .squeeze(axis=3) # 表示指定一个维度进行去除
print(tang_array.squeeze(axis=3).shape)
34 .transpose() 表示进行转置操作
tang_array = np.arange(0, 10, 1) tang_array.shape = 2, 5 print(tang_array.transpose())
35. np.concatenate((a, b), axis=0) # 进行矩阵的串接操作,(a, b)表示需要串接的tuple,axis=0进行上下的串接
a = np.array([[123, 456, 789], [3234, 456, 134]]) b = np.array([[123, 456, 789], [123, 546, 134]]) c = np.concatenate((a, b), axis=0) print(c)
36. np.vstack((a, b)) # 进行矩阵的上下位置上的串接
c = np.vstack((a, b)) print(c)
37. np.hstack((a, b)) # 进行矩阵左右位置上的串接
c = np.hstack((a, b)) print(c)
38. .flatten() # 进行拉平操作,拉成一个维度
print(c.flatten())
39. .ravel() # 进行拉平操作,也是拉成一个维度
print(c.ravel())
6-数组生成
40. np.arange(0, 10, 1) # 0表示开始,10表示结束,1表示中间间隔
import numpy as np # 根据np.arange进行数组1表示开始位置,10表示末位置, 2表示间隔 print(np.arange(1, 10, 2, dtype=np.float32))
41. np.linspace(0, 9, 10) # 0表示起始位置,9表示结束,10表示拆分成10份
print(np.linspace(0, 9, 10))
42. np.logspace(0, 1, 11) # 0表示起始位置, 1表示终止位置,11表示拆成11分,然后在输入
print(np.logspace(0, 1, 11)) #等价于10**0.1
43. np.meshgrid(x, y) # 生成一个网格矩阵
x = np.linspace(0, 10, 11) y = np.linspace(10, 20, 11) x, y = np.meshgrid(x, y) print(x) print(y)
44. np.r_[0:10:1] 构造一个行向量
print(np.r_[0:10:1])
45. np.c_[0:10:1] # 构造一个列向量
print(np.c_[0:10:1])
46. np.zeros(3)
import numpy as np # np.zeros 构造一个零矩阵 print(np.zeros(3)) print(np.zeros((2, 3)))
47. np.ones((3, 3)) # np.ones((3, 3)) 表示3*3的维度
print(np.ones((3, 3)))
48. np.empty(size) 生成一个空矩阵
a = np.empty(6) print(a)
49 np.zeros_like() 生成一个维度相同的零矩阵
tang_array = np.array([1, 2, 3, 4, 5]) tang_array2 = np.zeros_like(tang_array) print(tang_array2)
50 np.ones_like() 生成一个维度相同的1矩阵
tang_array3 = np.ones_like(tang_array) print(tang_array3)
51 np.identity(5) # 生成一个形状是5的单位矩阵
print(np.identity(5))
7-运算
52. np.multiply(x, y) #将x和y进行对应位置相乘操作
import numpy as np x = np.array([5, 5]) y = np.array([2, 2]) # np.multiply(x, y) 将x和y进行对应位置相乘操作 print(np.multiply(x, y))
53. np.dot(x, y) #将x和y进行点乘操作,即矩阵运算(2, 1) * (1, 2) = (2, 2)
print(np.dot(x.reshape(2, 1), y.reshape(1, 2)))
54 # ndarray会进行数据的自动补全操作
x = np.array([1, 1, 1]) y = np.array([[1, 2, 3], [3, 4, 5]]) print(x + y)
55 np.logical_and # 如果两个都是真的就是真
x = np.array([1, 0, 1]) y = np.array([1, 1, 0]) print(x==y) print(np.logical_and(x, y))
56. np.logical_or # 如果两个中有一个为真就是真
print(np.logical_or(x, y))
57. np.logical_not # 如果第二个数为1就是1,否者两个数都为0,等于1
print(np.logical_not(x, y))
8-随机矩阵
58. np.random.rand(3, 2) # 构造一个(3, 2)的随机矩阵
import numpy as np # 构造一个0,1之间的随机矩阵 print(np.random.rand(3, 2))
59. np.random.randint(0, 3, size=(2, 5)) # 构造一个0到2的随机整数矩阵,矩阵的维度是2,5
print(np.random.randint(0, 3, size=(5, 4)))
60 np.random.sample() # 返回一个0到1的随机数
print(np.random.sample())
61. np,random.uniform(0, 3, size=(2, 5)) # 从一个均匀的分布中随机取值
print(np.random.uniform(0, 1, size=(1, 1)))
62. np.random.normal(mu, sigma, size) # 根据均值和标准差进行随机生成高斯矩阵
m = 0 sigma = 0.1 #标准差 print(np.random.normal(m, sigma, size=(10, 1)))
63. np.set_printoptions(precision=3) # 进行输出的精度设置,3表示的小数点的个数
np.set_printoptions(precision=3) mu, sigma = 0, 0.1 n = np.random.normal(mu, sigma, 10) print(n)
64 np.random.shuffle() #对样本进行洗牌操作
tang_array = np.arange(0, 10, 1) np.random.shuffle(tang_array) print(tang_array)
65 np.random.seed(100) # 设置随机种子,让每次随机获的参数的结果相同,为了更好的进行对比
np.random.seed(100) x = np.random.normal(0, 0.1, size=(1, 10)) print(x)
9-读写
66. np.loadtxt('tang.txt', delimiter=",", skiprows=1), delimiter 表示分割符, skiprows表示去除第一行, usecols指定使用那几列数据
y = np.loadtxt('tang.txt', delimiter=',', skiprows=1) print(y)
67. np.savetxt('tang2.txt', tang_array, fmt='%.2f', delimiter=',')
tang_array = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.float32) np.savetxt('tang2.txt', tang_array, fmt='%.2f', delimiter=',')
68. 进行单个array参数的载入和读取,保存的格式是npy
tang_array = np.array([1, 2, 3, 4], dtype=np.float32) np.save('tang3.npy', tang_array) # 写入文件 tang_array = np.load('tang3.npy') # 读取文件 print(tang_array)
69. 进行多个array参数的载入和读取,使用的是np.savez,保存的格式是.npz,读取时使用key
tang_array = np.array([1, 2, 3, 4], dtype=np.float32) tang_array2 = np.array([4, 5, 6, 7], dtype=np.float32) np.savez('tang.npz', a=tang_array, b=tang_array2) data = np.load('tang.npz') print(data['a']) print(data['b'])
练习题-1
70. np.__version__ # 打印numpy当前的版本
import numpy as np print(np.__version__)
71 # 构造一个全零矩阵,并打印其所占内存数
z = np.zeros((5, 5)) print(z.size * z.itemsize) print(z.nbytes)
72 # 打印一个函数的帮助文档 help(np.info(np,add))
print(help(np.info(np.add)))
73. # 创建一个10-49的数组,并将其倒序排列
tang_array = np.arange(10, 50, 1) tang = tang_array[::-1] print(tang)
74 np.nonzero(tang_array) # 找出一个数组中不为0的索引值
print(np.nonzero([1, 2, 3, 4, 5, 0, 0, 3]))
75 # 随机构造一个3*3矩阵, 打印其最大值和最小值
np.random.seed(9) tang_array = np.random.randint(0, 10, size=(5, 6)) print(tang_array.min()) print(tang_array.max())
76 np.pad(tang_array, add_size, 'constant', constant_values=0) 构造一个5*5的矩阵,令其值为1,在最外层加上一圈0
tang_array = np.ones((5, 5)) tang_array2 = np.pad(tang_array, 1, 'constant', constant_values=0) print(tang_array2)
77. np.unravel_index(100, (6, 7, 8)) # 构建一个shape为(6, 7, 8)的矩阵,并找出第100个元素的索引值
print(np.unravel_index(100, (6, 7, 8)))
78. # 对一个5*5矩阵做0到1归一化操作
tang_array = np.random.random((5, 5))
tang_array = (tang_array - tang_array.min()) / (tang_array.max() - tang_array.min())
79. np.intersect1d(z1, z2) # 找出两个数组相同的数
np.random.randint(0, 11, 10) z2 = np.random.randint(0, 11, 10) print(np.intersect1d(z1, z2))
80. np.datetime64('today', 'D') np.timedelta64(1, 'D') # 得到昨天今天明天
yesterday = np.datetime64('today', 'D') - np.timedelta64(1, 'D') today = np.datetime64('today', 'D') tomorrow = np.datetime64('today', 'D') + np.timedelta64(1, 'D') print(yesterday)
81. 得到一个月中所有的天数
print(np.arange('2017-10', '2017-11', dtype='datetime64[D]'))
82. np.floor(value) # 取出一个数的整数部分
tang_array = np.random.uniform(0, 10, 10) print(np.floor(tang_array))
83 z.flags.writeable # 使得这个数组不能被改变
z = np.zeros(5) z.flags.writeable = False z[0] = 1
84. np.set_printoptin(threshold=np.nan) # 使得数组全部打印出来
np.set_printoptions(threshold=np.nan) z = np.zeros((5, 5)) print(z)
85.# 在一个数组中,找出最接近一个数的索引
z = np.arange(100) v = np.random.uniform(0, 100) print(v) index = np.abs(z - v).argmin() print(index)
86 # 进行float32与int32的类型转换
z = np.arange(10, dtype=np.float32) l = z.astype(np.int32) print(l.dtype)
87. # 打印数组的元素坐标与值
z = np.arange(9).reshape(3, 3) for index, value in np.ndenumerate(z): print(index, value)
88. 按照数组的某一列进行排序
z = np.random.randint(0, 10, (4, 3)) print(z[z[:, 1].argsort()])
89. np.bincount(tang_array) # 统计数组中元素的个数
z = np.array([1, 1, 1, 2, 2, 3, 4, 5]) print(np.bincount(z))
90. 对最后两个维度进行加和操作
tang_array = np.random.randint(0, 10, (4, 4, 4, 4)) print(tang_array.sum(axis=(-2, -1)))
91 # 交换矩阵的两行
tang_array = np.random.randint(0, 10, (3, 4)) tang_array[[1, 2]] = tang_array[[2, 1]] print(tang_array)
92 #找出数组中最常出现的数字
z = np.random.randint(0, 10, 10) print(np.bincount(z).argmax())
93 np.argpartition(-z, n)[:n] #找出K个最大值的索引和值
z = np.arange(10000) np.random.shuffle(z) n = 5 print(np.argpartition(-z, n)[:n])
94. np.all(x==y, aixs=1) #找出一行中都相同的数,打印True
# 找出所有元素都相同的数据 x = np.array([[1, 1]]) p = np.array([[1, 1]]) print(np.all(x == p, axis=1)) z = np.random.randint(0, 5, (10, 3)) print(np.all(z[:, 1:]==z[:, :-1]))