Python - 连续重新分配/更新类成员的正确方法

标签 python numpy

我有一个类,其成员是通过累积实验数据的值而构建的数字列表,例如

 class MyClass:
     def __init__(self):
          container1 = []
          container2 = []
            ...

     def accumulate_from_dataset(self,dataset):
          for entry in dataset:
               container1.append( foo (entry) )
               container2.append( bar (entry) )
                  ...


     def process_accumulated_data(self):   
           '''called when all the data is gathered
           '''
           process1(container1)
           process2(container2)
             ...

问题:如果我可以将所有列表转换为 numpy 数组,那将会很有帮助。


我尝试过的:简单的转换

    self.container1 = np.array(self.container1)

有效。不过,如果我想考虑“一次性更多领域”,比如

     lists_to_convert = [self.container1, self.container2, ...]

     def converter(lists_to_convert):
          for list in lists_to_convert:
               list = np.array(list)

由于对类成员的引用是按值传递的,因此没有任何有效的更改。


因此,我想知道是否有一种聪明的方法/解决方法来处理整个转换过程。

感谢任何帮助

最佳答案

来自The Pragmatic Programmer :

Ask yourself: "Does it have to be done this way? Does it have to be done at all?

也许您应该重新考虑您的数据结构?也许一些字典或简单的列表列表会更容易处理?

请注意,在所提供的示例中,container1container2 只是初始数据集 的转换。它看起来是列表理解的好地方:

foo_data = [foo(d) for d in dataset]
# or even
foo_data = map(foo, dataset)
# or generator version
foo_data_iter = (foo(d) for d in dataset)

如果您确实想要像示例中那样操作实例变量,请查看 getattrhasattr 内置函数

关于Python - 连续重新分配/更新类成员的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18575732/

相关文章:

Python:旋转矩阵到角度

python - 从手指图像中提取脊和谷

python - 加速 Numpy/Python 中的数组查询

python - 在内存中存储一​​个大的稀疏矩阵来计算特征值

python - 合并具有相同键的值

python - Pandas:使用 if 语句更新列

python - 使用 python cmd 模块实现 unix 管道?

python - 如何用零替换数组中的所有负数

python - numpy 函数将数组元素设置为给定索引列表的值

python - 如何用python计算极导数?