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

Python中按指定位置将NumPy数组元素插入并填充0的实现问题

问题描述

我有一个NumPy数组X,希望根据列表T2指定的位置将X的元素插入到新数组中,其余位置填充0.0以生成新数组。例如,4.17551036e+02应位于新数组的索引0,3.53856161e+02位于索引3,2.82754301e+02位于索引5,依此类推。

原代码:

import numpy as np

X = np.array([4.17551036e+02, 3.53856161e+02, 2.82754301e+02, 1.34119055e+02,
       6.34573886e+01, 2.08344718e+02, 1.00000000e-24])

C1=0.0
T2=[0, 3, 5, 8, 9, 10, 11]

for i in T2:
    X = np.insert(X, i, C1, axis=None)

print("X =", [X])

当前输出:

X = [array([0.00000000e+00, 4.17551036e+02, 3.53856161e+02, 0.00000000e+00,
       2.82754301e+02, 0.00000000e+00, 1.34119055e+02, 6.34573886e+01,
       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
       2.08344718e+02, 1.00000000e-24])]

期望输出:

X = [array([4.17551036e+02, 0.0, 0.0, 3.53856161e+02, 0.0,
       2.82754301e+02, 0.0, 0.0, 1.34119055e+02, 6.34573886e+01,
       2.08344718e+02, 1.00000000e-24])]
解决方案

原代码的问题在于每次调用np.insert都会修改原数组的长度,后续插入的索引会基于已改变的数组,导致位置完全错位。正确的做法是先创建指定长度的全0数组,再将原数组元素直接赋值到T2指定的索引位置。

修正后的代码

import numpy as np

X = np.array([4.17551036e+02, 3.53856161e+02, 2.82754301e+02, 1.34119055e+02,
       6.34573886e+01, 2.08344718e+02, 1.00000000e-24])

T2 = [0, 3, 5, 8, 9, 10, 11]
# 确定新数组的长度:取T2中的最大索引+1
new_length = max(T2) + 1
# 创建与原数组数据类型一致的全0数组
new_X = np.zeros(new_length, dtype=X.dtype)
# 将原数组元素批量赋值到指定位置
new_X[T2] = X

print("X =", [new_X])

代码解释

  1. 确定新数组长度:新数组长度由T2中的最大索引加1决定,确保能容纳所有指定位置。
  2. 创建全0数组:用np.zeros生成长度匹配、数据类型与原数组一致的全0数组,避免类型不兼容问题。
  3. 批量赋值:利用NumPy的索引特性,直接将原数组X的元素对应到new_X中T2指定的位置,其余位置保持0不变,一步到位完成需求。

内容的提问来源于stack exchange,提问作者RFeynman123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:45:29