【发布时间】:2015-03-23 12:18:05
【问题描述】:
在 numpy 中可以创建一个矩阵并使用方便的切片表示法
arr=np.array([[1,2,3], [4,5,6], [7, 8, 9], [10,11,12]])
print (arr[2, :])
print (arr[1:2, 2])
这可以扩展到N维。
但是现在,如果我希望拥有相同的东西,但是一个轴不是数字轴,而是基于字符串的轴,该怎么办?所以索引一个元素就像:
print(arr["cylinder", :, :]) #prints all cylinders
print(arr["sphere", 4, 100]) #prints sphere of 4 radius, 100 bar
print(arr[:, 4, 100]) #prints every shape with 4 radius 100 bar
我可以为每个“组合”(所有形状、特定半径、特定压力……所有形状、所有半径、特定压力……特定形状、特定半径、特定压力)。一个独特的功能,但这是不可行的,那么我该如何创建呢?
目前,所有内容都存储为字典中的字典(尤其是因为只使用了半径和压力值)。如果可以将底层存储保存为字典的字典 - 但添加切片/索引运算符,那将是黄金!
当前代码(是的,我确实有想法研究 kwargs 以使当前代码库更好地添加新点) - 这只是为了防止“NP”问题而添加:
class all_measurements(object):
def __init__(self):
self.measurements = {}
def add_measurement(self, measurement):
shape = measurement.shape
size = measurement.size
pressure = measurement.pressure
fname = measurement.filename
if shape in self.measurements:
shape_dict = self.measurements[shape]
else:
shape_dict = {}
self.measurements[shape] = shape_dict
if size in shape_dict:
size_dict = shape_dict[size]
else:
size_dict ={}
shape_dict[size] = size_dict
if pressure in size_dict:
pressure_dict = size_dict[pressure]
else:
pressure_dict = {}
size_dict[pressure] = pressure_dict
if fname in pressure_dict:
print("adding same file twice!")
pressure_dict[fname] = measurement
def get_measurements(self, shape = None, size = None, pressure = None, fname = None):
current_dict = self.measurements
if shape is None:
return current_dict
if shape in current_dict:
current_dict = current_dict[shape]
else:
return None
if size is None:
return current_dict
if size in current_dict:
current_dict = current_dict[size]
else:
return None
if pressure is None:
return current_dict
if pressure in current_dict:
current_dict = current_dict[pressure]
else:
return None
if fname is None:
return current_dict
if fname in current_dict:
return current_dict[fname]
else:
return None
【问题讨论】:
-
我认为您将映射与索引混合在一起。除了结构化数组的字段名称外,索引只计算行和/或列。它们没有标签、数字或其他标签。
-
您可以将
__getitem__和__getslice__方法添加到您的类中以获取索引语法。当然,解释索引或切片并返回正确的项目是您的责任。
标签: python numpy dictionary matrix