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
相关产品推荐
相关产品推荐

