我有一个类,其成员是通过累积实验数据的值而构建的数字列表,例如
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)
由于对类成员的引用是按值传递的,因此没有任何有效的更改。
因此,我想知道是否有一种聪明的方法/解决方法来处理整个转换过程。
感谢任何帮助
最佳答案
Ask yourself: "Does it have to be done this way? Does it have to be done at all?
也许您应该重新考虑您的数据结构?也许一些字典或简单的列表列表会更容易处理?
请注意,在所提供的示例中,container1
和 container2
只是初始数据集
的转换。它看起来是列表理解的好地方:
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)
如果您确实想要像示例中那样操作实例变量,请查看 getattr
和 hasattr
内置函数
关于Python - 连续重新分配/更新类成员的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18575732/