numpy学习(1)--数据选择:单个选取、切片划分、条件筛选、数据选择总结

当涉及到数据选择时,NumPy提供了各种灵活的方法,可以针对数组中的单个元素、切片或满足特定条件的元素进行选择。以下是更详细的解释和示例:

  1. 单个选取

    • 使用方括号索引来选择数组中的单个元素。索引是从0开始的整数,用于指定要选择的元素的位置。
    • 对于多维数组,可以使用逗号分隔的索引来选择元素。
    import numpy as np
    
    array = np.array([1, 2, 3, 4, 5])
    element = array[2]
    print(element)
    # 输出: 3
    
    # 多维数组的单个选取
    array = np.array([[1, 2, 3], [4, 5, 6]])
    element = array[1, 2]
    print(element)
    # 输出: 6
    
  2. 切片划分

    • 使用冒号(:)指定切片的范围,起始索引是包含在切片中的,而结束索引是不包含在切片中的。
    • 对于多维数组,可以使用逗号分隔的切片来选择子集。
    import numpy as np
    
    array = np.array([1, 2, 3, 4, 5])
    subset = array[1:4]
    print(subset)
    # 输出: [2 3 4]
    
    # 多维数组的切片划分
    array = np.array([[1, 2, 3], [4, 5, 6]])
    subset = array[:, 1:3]
    print(subset)
    # 输出:
    # [[2 3]
    #  [5 6]]
    
  3. 条件筛选

    • 使用条件操作可以选择满足特定条件的元素。这将返回一个布尔数组,指示哪些位置满足条件。
    • 使用布尔数组作为索引可以选择满足条件的元素。
    import numpy as np
    
    array = np.array([1, 2, 3, 4, 5])
    condition = array > 3
    subset = array[condition]
    print(subset)
    # 输出: [4 5]
    
    # 多维数组的条件筛选
    array = np.array([[1, 2, 3], [4, 5, 6]])
    condition = array > 3
    subset = array[condition]
    print(subset)
    # 输出: [4 5 6]
    

在数据选择中,还可以结合多个操作,例如使用切片划分后再进行条件筛选。此外,可以使用np.where()函数来根据条件选择元素的索引。

综上所述,NumPy的数据选择提供了许多灵活的方法,使你能够根据需要选择和操作数组的特定部分。无论是基于索引、切片还是条件,NumPy都提供了强大的功能来处理和筛选数据。

  • 18
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的用BP算法进行波段筛选的代码示例,可以参考一下: ```python import numpy as np import matplotlib.pyplot as plt # 读取红外光谱数据 data = np.loadtxt('data.txt') wavelength = data[:, 0] spectrum = data[:, 1:] # 定义BP算法相关参数 n_particles = 20 # 粒子数 n_iterations = 100 # 迭代次数 c1 = 2.0 # 学习因子1 c2 = 2.0 # 学习因子2 w = 0.7 # 惯性权重 # 定义目标函数 def objective_function(wavelength, spectrum, positions): selected_bands = np.where(positions > 0)[0] # 选出被选中的波段 if len(selected_bands) == 0: return np.inf selected_spectrum = spectrum[:, selected_bands] corr = np.corrcoef(selected_spectrum.T) return np.sum(np.abs(corr)) # 初始化粒子群 positions = np.random.randint(0, 2, size=(n_particles, spectrum.shape[1])) velocities = np.zeros_like(positions) pbest_positions = positions.copy() pbest_values = np.zeros(n_particles) for i in range(n_particles): pbest_values[i] = objective_function(wavelength, spectrum, pbest_positions[i]) gbest_position = pbest_positions[pbest_values.argmin()] gbest_value = pbest_values.min() # 迭代优化 for i in range(n_iterations): # 更新速度和位置 r1 = np.random.rand(n_particles, spectrum.shape[1]) r2 = np.random.rand(n_particles, spectrum.shape[1]) velocities = w * velocities + c1 * r1 * (pbest_positions - positions) + c2 * r2 * (gbest_position - positions) positions = np.where(np.random.rand(n_particles, spectrum.shape[1]) < 1 / (1 + np.exp(-velocities)), 1, 0) # 更新粒子最优解和全局最优解 values = np.zeros(n_particles) for j in range(n_particles): values[j] = objective_function(wavelength, spectrum, positions[j]) if values[j] < pbest_values[j]: pbest_positions[j] = positions[j].copy() pbest_values[j] = values[j] if values.min() < gbest_value: gbest_position = positions[values.argmin()].copy() gbest_value = values.min() # 输出筛选结果 selected_bands = np.where(gbest_position > 0)[0] selected_spectrum = spectrum[:, selected_bands] print('Selected bands:', wavelength[selected_bands]) print('Correlation matrix:', np.corrcoef(selected_spectrum.T)) # 绘制筛选结果 fig, ax = plt.subplots() ax.plot(wavelength, spectrum.mean(axis=1), label='Original spectrum') ax.plot(wavelength[selected_bands], selected_spectrum.mean(axis=1), label='Selected spectrum') ax.legend() plt.show() ``` 需要注意的是,该示例代码仅供参考,实际应用中可能需要根据具体问题进行适当调整和优化。例如,可以考虑增加惯性权重的变化、引入局部搜索等策略来提高算法的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值