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

如何构建适配遗留程序的一维数组组成的特定二维array结构?

遗留程序数组结构适配与性能疑问

问题背景

维护遗留程序时,需要构建一种特殊结构的二维数组:外层数组的每个元素必须是一个shape为(1,4)的numpy子数组。

当前生成的数组结构

all_measurements[:12]
array([[0.   , 0.   , 0.   , 2.   ],
       [0.02 , 0.334, 0.04 , 2.24 ],
       [0.04 , 0.668, 0.08 , 2.48 ],
       .....
])

程序要求的目标结构

array([array([[0.   , 0.   , 0.   , 2.   ]]),
       array([[0.02 , 0.334, 0.04 , 2.24 ]]),
       array([[0.04 , 0.668, 0.08 , 2.48 ]]),
       .....
])

原实现代码

import numpy as np

dt = 1/50; nt = 350
Vh = 16.7; Vv = 20.6; Vy = 2
gg = -10; v0 = +2

it = np.arange(nt)
ts = dt * it

all_measurements = []

for i in range(12):
    row = np.array([ts[i], Vh*ts[i], Vy*ts[i], (v0 + ts[i]*(Vy - gg))])
    all_measurements.append(row)

all_measurements = np.array(all_measurements)

报错信息

too many indices for array: array is 1-dimensional, but 2 were indexed
measurements[row_list[np.where(column_list == i)[0]],:])

修正后的代码

通过调整每行的数组嵌套结构,解决了解析报错:

for i in range(nt):
    row = np.array([np.array([ts[i], Vh*ts[i], Vy*ts[i], (v0 + ts[i]*(Vy - gg *ts[i]))])])
    all_measurements.append(row)

后续性能疑问

我知道行数不多(几百到一千左右),但初始化空列表后迭代追加元素,在内存管理和计算性能上是否存在低效问题?


解答

针对几百到一千行的规模,列表迭代追加的方式几乎不存在明显的性能或内存低效问题,原因如下:

  1. Python列表内部会预分配额外内存空间,不会每次追加都触发扩容操作,对于千级别的元素,扩容次数极少,额外开销可以忽略。
  2. 每个(1,4)的numpy子数组内存占用极小,即使一千个这样的数组,总内存消耗也微乎其微,不会造成内存压力。

如果想要进一步优化,可以利用numpy的向量化计算一次性生成所有数据,再构造目标结构,避免逐行循环:

import numpy as np

dt = 1/50; nt = 350
Vh = 16.7; Vv = 20.6; Vy = 2
gg = -10; v0 = +2

it = np.arange(nt)
ts = dt * it

# 向量化计算所有行数据,shape为(nt,4)
data = np.column_stack([
    ts,
    Vh * ts,
    Vy * ts,
    v0 + ts * (Vy - gg * ts)
])

# 转换为目标结构:外层数组的每个元素是(1,4)的子数组
all_measurements = np.array([np.array([row]) for row in data])

这种方式的效率比逐行循环更高,但对于千级别的数据量,两种方式的性能差异用户几乎感知不到。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 15:53:23