Numpy中的diff函数和clip函数

np.clip()

np.clip 是 NumPy 中用于将数组中的值限制在给定范围内的函数。它的语法如下:

numpy.clip(a, a_min, a_max, out=None)

参数说明:

  1. a : 输入的数组
  2. a_min: 限定的最小值 也可以是数组 如果为数组时 shape必须和a一样
  3. a_max:限定的最大值 也可以是数组 shape和a一样 out:剪裁后的数组存入的数组

示例

import numpy  as np 

a = np.arange(10)

print(a)
print(np.clip(a,3, 8))
print(a)

print(np.clip(a, 3, 6, out=a)) # 修剪后的数组存入到a中
print(a)

# 当a_min为数组时, a中每个元素和都和a_min中对应元素比较
# 0 < 3 -->小于最小值 则等于3
# 3 > 2 -->大于最小值 则等于本身 再和最大值比 没超过最大值 所以为3
print(np.clip(a, [3,4,1,1,7,4,4,4,4,4], 8))

[0 1 2 3 4 5 6 7 8 9]
[3 3 3 3 4 5 6 7 8 8]
[0 1 2 3 4 5 6 7 8 9]
[3 3 3 3 4 5 6 6 6 6]
[3 3 3 3 4 5 6 6 6 6]
[3 4 3 3 7 5 6 6 6 6]

np.diff()

np.diff() 是 NumPy 库中用于计算数组元素之间差异的函数。它计算数组中相邻元素之间的差值,并返回一个新的数组。其语法如下:

np.diff(a, n=1, axis=-1)

参数含义如下:

  1. a:输入的数组。
  2. n:可选参数,表示要计算的差值的次数。默认值为1。
  3. axis:可选参数,表示沿着哪个轴计算差值。默认值为-1,表示最后一个轴。

示例

import numpy as np

arr = np.array([1, 3, 6, 10, 15])
diff_arr = np.diff(arr)
print(diff_arr)

[2 3 4 5]

如何确保差分之后的数组长度和以前的数组长度保持一致呢?我们只需要在np.diff()的时候增加一个新的参数:prepend

import numpy as np

arr = np.array([1, 3, 6, 10, 15])
diff_arr1 = np.diff(arr,prepend=0)
print(diff_arr1)

diff_arr2 = np.diff(arr,prepend=2)
print(diff_arr2)

diff_arr3 = np.diff(arr,prepend=3)
print(diff_arr3)

[1 2 3 4 5]
[-1  2  3  4  5]
[-2  2  3  4  5]

除了我们可以直接自己指定传入的数值大小,我们还可以通过索引、切片的方式来做,其中a[0]=1,a[1]=3:

import numpy as np

arr = np.array([1, 3, 6, 10, 15])

diff_arr2 = np.diff(arr,prepend=arr[0])
print(diff_arr2)

diff_arr3 = np.diff(arr,prepend=arr[1])
print(diff_arr3)

[0 2 3 4 5]
[-2  2  3  4  5]

prepend接受的参数其实在数组a进行差分前,需要排到数组a的开头去,形成新的数组后,才进行差分运算

import numpy as np

arr = np.array([1, 3, 6, 10, 15])

print(np.diff(arr,prepend=arr[0:2]))
[ 2 -2  2  3  4  5]
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的路径长度和安全值的PSO算法的代码示例: ```python import numpy as np class PSO: def __init__(self, pop_size, dim, max_iter, c1, c2, w, bounds): self.pop_size = pop_size # 种群大小 self.dim = dim # 变量维度 self.max_iter = max_iter # 最大迭代次数 self.c1 = c1 # 学习因子1 self.c2 = c2 # 学习因子2 self.w = w # 惯性权重 self.bounds = bounds # 变量取值范围 # 初始化粒子位置和速度 self.pos = np.random.uniform(bounds[0], bounds[1], (pop_size, dim)) self.vel = np.random.uniform(bounds[0], bounds[1], (pop_size, dim)) # 初始化粒子最优位置和适应度值 self.pbest_pos = self.pos.copy() self.pbest_fitness = np.zeros(pop_size) # 初始化全局最优位置和适应度值 self.gbest_pos = np.zeros(dim) self.gbest_fitness = np.inf def fitness_func(self, x): """ 计算适应度值函数,包括路径长度和安全值 """ # 计算路径长度 path_length = np.linalg.norm(np.diff(x, axis=0)) # 计算安全值 safety_value = np.sum(x ** 2) # 返回适应度值 return path_length + safety_value def optimize(self): for i in range(self.max_iter): # 计算适应度值 fitness = np.array([self.fitness_func(x) for x in self.pos]) # 更新粒子最优位置和适应度值 for j in range(self.pop_size): if fitness[j] < self.pbest_fitness[j]: self.pbest_pos[j] = self.pos[j].copy() self.pbest_fitness[j] = fitness[j] # 更新全局最优位置和适应度值 if np.min(fitness) < self.gbest_fitness: self.gbest_pos = self.pos[np.argmin(fitness)].copy() self.gbest_fitness = np.min(fitness) # 更新粒子速度和位置 r1 = np.random.rand(self.pop_size, self.dim) r2 = np.random.rand(self.pop_size, self.dim) self.vel = self.w * self.vel + self.c1 * r1 * (self.pbest_pos - self.pos) + self.c2 * r2 * (self.gbest_pos - self.pos) self.pos = np.clip(self.pos + self.vel, self.bounds[0], self.bounds[1]) # 返回全局最优位置和适应度值 return self.gbest_pos, self.gbest_fitness ``` 在这个示例,`fitness_func` 函数计算了路径长度和安全值的适应度值,并在 `optimize` 函数被调用。`pos` 数组存储了粒子的位置,`vel` 数组存储了粒子的速度,`pbest_pos` 数组和 `pbest_fitness` 数组存储了每个粒子的最优位置和适应度值,`gbest_pos` 数组和 `gbest_fitness` 存储了全局最优位置和适应度值。在 `optimize` 函数,通过更新粒子速度和位置来优化适应度值,并返回全局最优位置和适应度值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值