你可以写一个薄薄的包装子类到np.ndarray
。但维护维度和名称之间的对应关系可能会很棘手。
class NamedArray(np.ndarray):
def __new__(cls, *args, **kwargs):
obj = np.ndarray(args[0], **kwargs).view(cls)
return obj
def __init__(self, *args, **kwargs):
self.dim_names = None
if len(args) == 2:
self.dim_names = args[1]
def sum(self, *args, **kwargs):
if (self.dim_names is not None) and (type(kwargs['axis']) == str):
axis_name = kwargs.pop('axis')
axis_ind = self.dim_names.index(axis_name)
kwargs['axis'] = axis_ind
return super().sum(*args, **kwargs)
#regular ndarray
a = NamedArray([1,2,3], dtype=np.float32)
#ndarray with dimension names
b = NamedArray([1,2,3], ('d1', 'd2', 'd3'), dtype=np.float32)
编辑: Pandas DataFrame现在是什么OP问个八九不离十的事情。
不需要问候和感谢。事实上,你甚至可以看到正是这个正则表达式(它现在可能已经被改进了)用于删除它们[这里](http://meta.stackexchange.com/a/93989/163205)。 – DSM 2013-05-06 15:55:38
我能想到的最佳方式是维护一个字典,其中包含从名称到轴号的映射。要么是这样,要么在底部使用嵌套的数组,但这可能比它的价值更麻烦(而且据我所知,并不是犹太教中的犹太人)。 – 2013-05-06 16:34:17
你真的需要'DI'作为一个字符串吗?如果你让'DI = 2'在你的代码中的某处,你就可以执行'np.sum(a,axis = DI)'... – jorgeca 2013-05-06 19:35:41