numpy中一些较为复杂的操作和书本案例

发布时间 2023-10-21 00:11:33作者: YaYa000

数组的轴

 


 

数组的排序

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))
# 判断每一个元素中的元素是否在[-21]中
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()