数组的排序
import numpy as np arr = np.array([[1,2,3],[6,4,5],[3,8,9]]) print(arr) # 将数组进行排序,默认按1轴。sort()里面可以加参数,表示按什么轴进行排序 arr.sort() arr #---------------------下面是输出结果------------------------- [[1 2 3] [6 4 5] [3 8 9]] ---------------------- array([[1, 2, 3], [4, 5, 6], [3, 8, 9]])
数组的唯一化
# 将数组进行唯一化 arr_1 = np.array([[1,-2,-4],[5,6,-9],[1,5,7],[8,-2,9]]) print(arr_1) # np.unique是寻找数组中的唯一值,并且按排序结果展示出来 print(np.unique(arr_1)) # 判断每一个元素中的元素是否在[-2,1]中 np.in1d(arr_1,[-2,1]) # -----------------------下面是输出结果----------------------- [[ 1 -2 -4] [ 5 6 -9] [ 1 5 7] [ 8 -2 9]] -------------------------------- [-9 -4 -2 1 5 6 7 8 9] -------------------------------- array([ True, True, False, False, False, False, True, False, False, False, True, False])
矩阵乘法
arr_3 = np.array([[1,2,3],[4,5,6]]) arr_4 = np.array([[1,3],[2,4],[3,5]]) # 矩阵乘法,其中第一个矩阵的列列要和第二个矩阵的行数相等。下面的等价与arr_3.dot(arr_4) np.dot(arr_3,arr_4) #------------------------下面是输出结果------------------------- array([[14, 26], [32, 62]])
函数 | 描述 |
---|---|
dot | 矩阵乘法 |
diag | 以一维数组形式返回主对角线元素 |
trace | 计算对角线元素和 |
det | 计算矩阵的行列式 |
eig | 计算矩阵的特征值和特征向量 |
svd | 计算奇异值 |
检索数组元素
arr_2 = np.array([[1,2,3],[-6,4,-5],[5,2,-7]]) print(arr_2) # 任意一个元素大于4,即返回True print(np.any(arr_2>4)) # 所有元素都小于0才返回True,否则返回False np.all(arr_2<0) #--------------------------下面是输出结果--------------------------- [[ 1 2 3] [-6 4 -5] [ 5 2 -7]] --------------------- True --------------------- False
将条件逻辑转化为数组运算
arr_7 = np.array([1,3,4]) arr_8 = np.array([2,5,7]) arr_9 = np.array([True,False,True]) # 相当于np.where(c ? a : b )即C成立则为A,否则为B result = np.where(arr_9,arr_7,arr_8) result #-------------------------------下面是输出结果-------------------------------- array([1, 5, 4])
随机数
# 随机生成一个二维数组 print(np.random.rand(4,4)) # 随机生成一个三维数组 np.random.rand(3,3,4) # -------------------------------下面是输出结果--------------------------------- [[0.24820386 0.3378365 0.70003097 0.67997527] [0.87863683 0.35622155 0.67766883 0.13932934] [0.0019008 0.41007625 0.2807913 0.4931967 ] [0.49301289 0.44827539 0.89618087 0.25996665]] ------------------------------------------------------------------- array([[[0.97073113, 0.1980718 , 0.36504535, 0.7357999 ], [0.96646369, 0.84729437, 0.38311033, 0.67252913], [0.26709493, 0.75064852, 0.30543598, 0.74046702]], [[0.72847394, 0.30711279, 0.6229836 , 0.72597688], [0.20149018, 0.13494743, 0.46739059, 0.35448137], [0.33689778, 0.49443236, 0.83048002, 0.33270924]], [[0.01008538, 0.83435295, 0.4786589 , 0.01484781], [0.28169494, 0.46894022, 0.64676805, 0.3689383 ], [0.01185592, 0.28261014, 0.86340529, 0.0691245 ]]])
随机数种子
# 生成随机数的种子 np.random.seed(0) # 生成5个随机数 np.random.rand(5) #----------------------------下面是输出结果----------------------------- array([0.5488135 , 0.71518937, 0.60276338, 0.54488318, 0.4236548 ])
函数 | 描述 |
---|---|
randint | 从给定的范围内选取随机整数 |
normal | 产生正态分布样本值 |
beta | 产生beta分布样本值 |
插入数组元素
arr_5 = np.array([[1,2],[3,4],[5,6]]) print(arr_5) # 在arr_5 索引为1的位置插入[7,8],没有指定轴会变成一维 print(np.insert(arr_5,1,[7,8])) # 广播机制,在索引为2的位置按1轴位置插入10 print(np.insert(arr_5,2,10,axis=1)) # 在数组索引为1的位置按0轴方向插入[7,8] np.insert(arr_5,1,[7,8],axis=0) #-----------------------------下面是输出结果------------------------------ [[1 2] [3 4] [5 6]] --------------------------- [1 7 8 2 3 4 5 6] --------------------------- [[ 1 2 10] [ 3 4 10] [ 5 6 10]]] --------------------------- array([[1, 2], [7, 8], [3, 4], [5, 6]])
添加数组元素
arr_6 = np.array([[1,2,3],[4,5,6]]) print(arr_6) # 在arr_6这个数组中添加[[7,8,9]]这个元素,不指定轴会默认变为一维 print(np.append(arr_6,[[7,8,9]])) # 添加[[7,8,9]],按0轴方向添加(由于arr_6是二维数组,添加时最好也为二维数组) print(np.append(arr_6,[[7,8,9]],axis=0)) # 添加两个元素 np.append(arr_6,[[7,8,9],[1,2,3]],axis=0) #--------------------------------以下是输出结果-------------------------------- [[1 2 3] [4 5 6]] ------------------------------- [1 2 3 4 5 6 7 8 9] ------------------------------- [[1 2 3] [4 5 6] [7 8 9]] ------------------------------- array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [1, 2, 3]])
小案例
# 酒鬼漫步
# 这个酒鬼走了2000步(每步为0.5m),向前走一步记为1,向后走一步记为-1,当计算距原点的距离时,就是将所有的步数进行累计加和。因此使用2000个
# “掷硬币值”(两个结果中选一个)
import numpy as np
# 酒鬼走了2000步
steps = 2000
# 即在0到2之间取2000个这样的整数,为左闭右开区间
draws = np.random.randint(0,2,size=steps)
print(draws)
# 如果大于1,就为1,即向前走了一步。如果小于1,则为-1,即向后走了一步
d_s = np.where(draws>1,1,-1)
# 对所有结果进行累加
dis = d_s.cumsum()
# 计算向前走的最远距离
print(dis.max())
# 计算向后走的最远距离
dis.min()