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

for循环外向vstack追加数据构建星场数据立方体的问题咨询

核心错误原因

  1. 传参错误:循环遍历图像时,你调用fitPSF传入的是固定的image_array变量,而非当前循环到的图像i,这直接导致返回的恒星参数数组长度和初始结果不一致,是你看到维度不匹配报错的核心诱因。
  2. 拼接逻辑完全错误:
    • 循环中你每次执行data_cube = np.vstack((results_array,new_results)),是直接用初始的results_array和当前新结果覆盖原有的data_cube,之前循环的结果全部丢失,根本没有实现追加效果
    • np.append是非原地操作,你没有把它的返回值赋值给data_cube,这行代码完全不生效
    • vstack是沿0轴拼接二维数组的方法,不可能生成你需要的三维数据立方体
  3. numpy.append完全不适合这个场景:它默认会把输入数组扁平化后再拼接,极难控制三维维度,且循环中反复拼接会不断重新申请内存,效率非常低。

修复方案

推荐提前初始化固定大小的三维数组,直接按帧位置写入结果,完全避免拼接带来的维度问题,性能也最优。
首先明确你数据立方体的维度定义:我们这里按[参数数量, 恒星数量, 帧数]的维度设计,你可以根据自己的使用习惯调整维度顺序。


修正后代码示例

import numpy as np
import imageio

# 你原有处理第一张图像、调用fitPSF获取初始结果的逻辑保持不变
# results_array 中每个元素是长度为N的数组,对应N颗恒星的对应参数
results_array = [x2, y2, amplitude, intensity, sigma_y_fitted, sigma_x_fitted]

param_num = len(results_array) # 参数总数,固定为6
star_num = len(results_array[0]) # 识别到的恒星总数,从第一张结果获取
total_frame = 6 # 第一张+后续5张,共6帧

# 提前初始化三维数据立方体
data_cube = np.zeros((param_num, star_num, total_frame))
# 写入第一帧结果
data_cube[..., 0] = np.array(results_array)

# 加载后续5张图像
images = [imageio.imread(f"/home/jryan/{i+1}capture.PNG", as_gray=True) for i in range(5)]

# 遍历后续图像,从索引1开始写入
for frame_idx, current_img in enumerate(images, start=1):
    # 复用第一张图的恒星坐标
    x, y = results_array[0], results_array[1]
    # 传入当前帧图像调用fitPSF,替换原有的image_array
    x2, y2, amplitude, intensity, sigma_y_fitted, sigma_x_fitted = fitPSF(current_img, global_mean, x, y)
    new_results = [x2, y2, amplitude, intensity, sigma_y_fitted, sigma_x_fitted]
    # 直接写入对应帧位置,无需拼接
    data_cube[..., frame_idx] = np.array(new_results)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:24:06