0

我正在使用 numpy ORM 构建数据模拟框架,在其中使用类和对象而不是直接使用 numpy 数组要方便得多。尽管如此,模拟的输出应该是 numpy array。在这里,blockz 作为后端也很有趣。

我想将所有对象属性映射到 numpy 数组。因此,numpy 数组就像我的类的面向列的“持久”存储一样工作。我还需要将“新”属性链接到我可以使用 numpy(pandas) 框架计算的对象。然后只需使用相同的后端将它们相应地链接到对象。

这种方法有什么解决方案吗?您会推荐任何以 HPC 方式构建它的方法吗?我只找到了 django-pandas。PyTables 在添加新的列属性时非常慢。

类似于(处理指向 np_array 的指针):

class Instance()
    def __init__(self, np_array, np_position):
        self.np_array = np_array
        self.np_position = np_position

    def get_test_property():
        return(self.np_array[np_position])

    def set_test_property(value):
        self.np_array[np_position] = value
4

1 回答 1

0

事实上,有一种方法可以通过引用来更改 NumPy 或 bcolz 数组。简单的例子可以在下面的代码中找到。

a = np.arange(10)
class Case():
    def __init__(self, gcv_pointer):
        self.gcv = gcv_pointer

    def gcv(self):
        return(self.gcv)

    def gcv_set(self, value):
        self.gcv[:] = value
pass
#===============================================================================
# NumPy
#===============================================================================
caseList = []
for i in range(1, 10):
    case = Case(a[i-1:i])
    caseList.append(case)
gcvs = [case.GetGCV() for case in caseList]
caseList[1].SetGCV(5)
caseList[1].SetGCV(13)
caseList[1].gcv[:] = 6

setattr(caseList[1], 'dpd', a[5:6])

caseList[1].dpd
caseList[1].dpd[:] = 888
于 2014-11-17T22:47:04.607 回答