Python之NumPy重新复习

avatar 2024年06月03日10:15:25 0 68 views
博主分享免费Java教学视频,B站账号:Java刘哥 ,长期提供技术问题解决、项目定制:本站商品点此

最近准备以后主要以Python作为优化算法研究的主要编程语言

  • 关于Matlab,代码很简洁,开发工具也还不错(就是快捷键太少)、而且大部分科研前沿的作者的代码都是用Matlab,所以这个不能放弃,需要作为第二语言。
  • 关于Java,我本身有多年的Java开发经验,对于Java也是非常熟悉,但是Java缺点就是代码量太大,缺乏很多对数组操作的库,需要自己去封装,而且优化算法领域基本很少用Java。
  • 关于Python,Python通过使用NumPy,代码也能像Matlab一样那么简单,而且加上PyCharm加持(我本身很喜欢JetBrains公司的IDE),无论是开发还是调试都很得心应手。除此之外,到时候可能会参加蓝桥杯比赛,众所周知,Python是最简单的语言。于是,我就选择Python作为自己的主要语言。

之前学习 NLP 时也学过一段时间 NumPy,后面换方向就忘了。

以下是昨天下午和今天上午重新整理了一波NumPy的学习。

1、numpy 基本操作

# 定义
arr = np.array([1, 2, 3, 4, 5, 6])
zeros = np.zeros((10, ))  # 一维数组,10个
zeros = np.zeros((10, 2)) #二维数组,10行2列


# 改变结构
arr32 = arr.reshape(3, 2) # 重塑
arr = arr32.flatten()  # 展平为一维数组

# 拼接
arr1 = np.array([1, 2, 3]) # 或者 arr1 = [1, 2, 3]
arr2 = np.array([4, 5, 6]) # 或者 arr2 = [4, 5, 6]
vstacked = np.vstack((arr1, arr2)) # 垂直拼接
hstacked = np.hstack((arr1, arr2)) # 水平拼接

# 索引与切片同list,arr[1]、arr[1:], arr[:4], arr[1:2]
# 广播机制:arr + 1 # 所有元素+1
# 基本属性:arr.shape, arr.dtype, arr.size

 

2、numpy 数学函数

arr = np.array([1, 2, 3, 4])
total = np.sum(arr)                 # 求和
mean = np.mean(arr)                 # 求均值
std = np.std(arr)                   # 求标准差
median = np.median(arr)             # 中位数

max_value = np.max(array_1d)        # 最大值
min_value = np.min(array_1d)        # 最小值
max_index = np.argmax(array_1d)     # 最大值索引
min_index = np.argmin(array_1d)     # 最小值索引

补充python自带数学函数

# abs(x))、max(list))、min(list))、sum(list))、round(x, dotLen)
# import math
# math.pi、math.e、math.fabs(-10)、
# math.pow()、math.sqrt、math.log、math.log10、
# math.cos 、math.sin 、math.tan 、math.factorial、
# math.ceil 、math.floor、math.fmod
# 保留2位小数:round(math.pi, 2)、float(format(math.pi, '.2f'))
# 最大/小值:float('inf')、float('-inf')

3、numpy random函数

# 生成[0, 1) 随机小数    【均匀分布】
random_float       = np.random.rand()           # 1个,等价于 random.random() 
random_float       = np.random.rand(10, )       # 10个
random_float_array = np.random.rand(10, 2)      # 10行2列

# 生成[-10, 10) 随机小数  【均匀分布】
populations        = np.random.uniform(-10, 10)                 # 1个,等价于 random.uniform(-10, 10)
populations        = np.random.uniform(-10, 10, size=(10,   ))  # 10个 
populations        = np.random.uniform(-10, 10, size=(10, 2))   # 10行2列
# 等价于:
# minVal, maxVal = -10, 10
# populations = np.random.rand(10, 2) * (maxVal - minVal) + minVal

# 生成[0, 100) 随机整数
random_int         = np.random.randint(0, 100)              # 1个,等价于 random.randint(0, 100)
random_int         = np.random.randint(0, 10, size=(10, ))  # 10个
random_int_array   = np.random.randint(0, 10, size=(10, 2)) # 10行2列

# 采样
random_choice  = np.random.choice([0, 1, 2, 3, 4])              # 1个,等价于 random.choice(list1)
random_choices = np.random.choice([0, 1, 2, 3, 4], size=3)      # 3个,可重复
random_choices = np.random.choice(range(5), size=3, replace=False)   # 不可重复采样
# 等价于 random.sample(list1, k)

# 乱序处理
np.random.shuffle(array)

# 设置随机种子
np.random.seed(42)

 

补充 Python自带的随机函数对照

import random
random.random() # 生成0-1随机小数
random.randint(a, b) # 生成1个随机整数
random.uniform(a, b) # 生成1个随机小数
random.choice(list1) # 随机选1个
random.sample(list1, k) # 随机选k个不一样的
random.shuffle(nums1) # 打乱 
random.gauss(0, 1) # 获取正态分布随机数

 

  • 微信
  • 交流学习,有偿服务
  • weinxin
  • 编程爱好者交流群
  • 资源分享,问题解决,技术交流。QQ群:424285828(新群)
  • weinxin
avatar

发表评论

avatar 登录者:匿名
匿名评论,评论回复后会有邮件通知

  

已通过评论:0   待审核评论数:0