Python中如何基于不同长度的两个向量生成目标向量?
解决方案:按规则生成目标numpy数组
首先纠正你代码中的数组初始化错误——np.array() 需要传入可迭代对象(比如列表),正确的初始化代码如下:
import numpy as np arr1 = np.array([1, 2, 3, 4, 5, 6]) arr2 = np.array([1, 1, 0, 1, 1, 0, 0, 0, 1, 1])
方法一:索引定位填充
这是最直观的实现方式,步骤清晰,适合新手理解:
# 创建与arr2长度相同、全为-9的数组 arr3 = np.full_like(arr2, -9) # 获取arr2中所有值为1的位置索引 ones_positions = np.where(arr2 == 1)[0] # 取arr1和1的数量中较小的长度,避免索引越界 fill_count = min(len(arr1), len(ones_positions)) # 将arr1的元素依次填充到arr2中1对应的位置 arr3[ones_positions[:fill_count]] = arr1[:fill_count] print(arr3) # 输出结果:[ 1 2 -9 3 4 -9 -9 -9 5 6]
方法二:累积计数映射
利用numpy的累积求和功能,直接生成arr1的索引映射,代码更简洁:
# 计算每个位置对应的arr1索引(arr2中1的累积计数减1) arr1_indices = np.cumsum(arr2) - 1 # 初始化arr3为全-9 arr3 = np.full_like(arr2, -9) # 筛选出索引有效(小于arr1长度)的位置,填充arr1的对应元素 valid_mask = arr1_indices < len(arr1) arr3[valid_mask] = arr1[arr1_indices[valid_mask]] print(arr3) # 输出结果:[ 1 2 -9 3 4 -9 -9 -9 5 6]
两种方法都能处理arr1长度小于arr2的情况——当arr1的元素用完后,arr2中剩余的1位置会保持-9。
内容的提问来源于stack exchange,提问作者Ulises Rodriguez
相关产品推荐
相关产品推荐

