最近准备以后主要以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) # 获取正态分布随机数
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏