Python中按指定索引在numpy数组中填充值并补零
基于索引列表重排NumPy数组并填充0
我有一个索引列表T2,还有一个包含不同形状NumPy数组的数组X,需要按照T2里的索引重新排列X中每个数组的元素:X[i]的元素要放到T2[i]指定的位置,未提及的位置填充0。
示例输入代码
import numpy as np T2 = [[0, 3, 4, 5], [1, 2, 3, 4]] X=np.array([np.array([4.23056174e+02, 3.39165087e+02, 3.98049092e+02, 3.68757486e+02]), np.array([4.23056174e+02, 3.48895801e+02, 3.48895801e+02, 3.92892424e+02])])
预期输出
array([array([4.23056174e+02, 0. , 0. , 3.39165087e+02, 3.98049092e+02, 3.68757486e+02]), array([0. , 4.23056174e+02, 3.48895801e+02, 3.48895801e+02, 3.92892424e+02])], dtype=object)
解决方案代码
import numpy as np T2 = [[0, 3, 4, 5], [1, 2, 3, 4]] X = np.array([ np.array([4.23056174e+02, 3.39165087e+02, 3.98049092e+02, 3.68757486e+02]), np.array([4.23056174e+02, 3.48895801e+02, 3.48895801e+02, 3.92892424e+02]) ]) processed_arrays = [] for idx_list, original_arr in zip(T2, X): # 计算目标数组的长度:最大索引值+1 target_length = max(idx_list) + 1 # 创建对应长度的全零数组 new_array = np.zeros(target_length, dtype=original_arr.dtype) # 将原数组元素放到指定索引位置 new_array[idx_list] = original_arr processed_arrays.append(new_array) # 转换为object类型的NumPy数组,匹配原输入的结构 result = np.array(processed_arrays, dtype=object) print(result)
逻辑说明
- 遍历
T2和X的每一组对应元素,针对每个数组单独处理 - 通过索引列表的最大值确定目标数组的长度,确保所有指定索引都能容纳
- 先创建全零数组,再利用NumPy的索引赋值特性,直接将原数组元素放到对应位置
- 最终将所有处理后的数组打包成object类型的NumPy数组,保持和输入一致的结构
内容的提问来源于stack exchange,提问作者AEinstein
相关产品推荐
相关产品推荐

