You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 04:10:35