【发布时间】:2012-10-29 02:10:31
【问题描述】:
我有一个子类 numpy 数组 - 一个带有元数据(例如单位)的“光谱轴”。
我可以使用arr.copy 或使用例如arr2=arr[2:5] 的视图创建任何实例的副本。
有没有办法创建这些数组之一的新实例具有不同的形状但保持相同的元数据/数据类型?
【问题讨论】:
标签: python arrays numpy reshape
我有一个子类 numpy 数组 - 一个带有元数据(例如单位)的“光谱轴”。
我可以使用arr.copy 或使用例如arr2=arr[2:5] 的视图创建任何实例的副本。
有没有办法创建这些数组之一的新实例具有不同的形状但保持相同的元数据/数据类型?
【问题讨论】:
标签: python arrays numpy reshape
一个简单的解决方案是在您的子类中定义一个.reshape 方法。这个.reshape 方法应该调用负责从您的对象复制元数据的__array_finalize__ 方法。
例如,MaskedArray 子类使用 _update_from 私有方法将一些元数据(_fill_value、_optinfo...)从一个对象复制到另一个对象,或者为这些元数据设置默认值(如果它们还没有)可用的。 _update_method 在 __array_finalize__ 内被调用。您可以以sources 为例。
【讨论】:
__dict__,你可以首先确保它被正确地复制到__array_finalize__。你可能不需要整个_update_from。