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

Python中按指定索引生成新数组的代码问题求助

解决Numpy数组元素按指定索引位置填充问题

我有一个Numpy数组X和列表T2,想要创建新数组Xnew,将X的元素放置到T2指定的对应位置。以下是我的实现代码、当前输出及期望输出:

原实现代码

import numpy as np

X=np.array([4.15887486e+02, 3.52446375e+02, 2.81627790e+02, 1.33584716e+02,
       6.32045703e+01, 2.07514659e+02, 1.00000000e-24])

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


def make_array(indices, values):
    rtrn = np.zeros(np.max(indices) + 1, dtype=values.dtype)
    rtrn[indices] = values
    return 

Xnew = np.array([make_array(Ti, Xi) for Ti, Xi in zip([T2], X)], dtype=object)
print("New X =",[Xnew])

当前输出

New X = [array([None], dtype=object)]

期望输出

[array([[4.15887486e+02, 0.0, 0.0, 3.52446375e+02, 0.0,
        2.81627790e+02, 0.0, 0.0, 1.33584716e+02,
        6.32045703e+01, 2.07514659e+02, 1.00000000e-24]],
      dtype=object)]

错误分析及修正

错误点

  1. make_array函数未返回创建的数组:函数最后仅写了return,没有返回填充好的rtrn数组,导致每次调用都返回None。
  2. 列表推导式逻辑错误:zip([T2], X)会将整个T2列表作为单个元素,与X的每个元素逐一配对,这不符合“用T2所有索引对应X所有元素一次性填充数组”的需求。

修正后的代码

import numpy as np

X = np.array([4.15887486e+02, 3.52446375e+02, 2.81627790e+02, 1.33584716e+02,
              6.32045703e+01, 2.07514659e+02, 1.00000000e-24])

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


def make_array(indices, values):
    rtrn = np.zeros(np.max(indices) + 1, dtype=values.dtype)
    rtrn[indices] = values
    return rtrn  # 返回填充完成的数组

# 直接调用函数生成目标数组,再包装为二维数组格式
Xnew = np.array([make_array(T2, X)], dtype=object)
print("New X =", [Xnew])

运行修正后的代码,即可得到与期望一致的输出。

内容的提问来源于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 00:05:24