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

Jython中如何复制带有特殊类型码的array.array数组?

解决Jython中nom-tam-fits二维array.array复制问题

可行的复制方案

方案1:逐行复制一维子数组

原二维数组的每一行都是标准的一维array.array(类型码'i'),可以遍历每一行单独复制:

import array
from nom.tam.fits import Fits

f = Fits('example_image.fits')
data = f.getHDU(0).getKernel()

# 初始化新的二维数组容器
new_data = []
for row in data:
    # 创建同类型的一维array并复制元素
    copied_row = array.array(row.typecode)
    copied_row.extend(row)
    new_data.append(copied_row)

方案2:借助Java数组复制API

Jython可以直接调用Java标准库的数组复制方法,利用底层Java数组实现高效复制:

import array
from nom.tam.fits import Fits
from java.util import Arrays

f = Fits('example_image.fits')
data = f.getHDU(0).getKernel()

new_data = []
for row in data:
    # 将Python array转为Java数组并复制
    java_row = row.toArray()
    copied_java_row = Arrays.copyOf(java_row, len(java_row))
    # 转回Python array
    copied_row = array.array(row.typecode, copied_java_row)
    new_data.append(copied_row)

问题根源

你遇到的错误是因为:

  • Jython中nom-tam-fits返回的二维array.array,其类型码'[I'是Java中int数组的类型签名(表示一维int数组),并非Python标准array模块支持的单字符类型码(比如'i'表示单个int)。
  • Python的copy.deepcopy和array.array()构造函数只识别单字符类型码,因此无法直接处理'[I'这种多字符的类型标识。

补充说明

不需要在Java层单独处理数据,完全可以在Jython中通过上述两种方式完成数组复制,无需额外编写Java代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 17:02:04