Для последней функции я бы порекомендовал:
init = []
ContainerClass.arr = np.array([init + Array(myclass.arr) for myclass in self.my_class_inst])
преобразовать массив numpy в обычный массив, создать и вернуть его обратно.Предположим теперь, что у вас есть простые одномерные массивы.Я не помню наизусть, есть ли в массиве numpy функция сцепления.Вы можете использовать это вместо знака «+» и избавить от необходимости приведения типов.
Для первого у вас есть самая простая форма, которую я могу себе представить, хотя я обычно использую обычные массивы вместо пустых для объектов.
Если вы хотите быть действительно умным, вы можете создать функцию __add__
для обоих классов.Затем вы можете использовать знак «+» для добавления классов.a + b
звонки a.__add__(b)
.Теперь вам нужно будет создать функции, которые имеют следующие свойства
- MyClass + MyClass возвращает новый экземпляр MyClasses с a и b внутри
- MyClasses + MyClass добавляет MyClass в MyClasses так, как вы хотите
Теперь, если a, b, c, d являются экземплярами myClass, a+b+c+d
должен возвращать MyClasses -class, который содержит экземпляры MyClass a, b, c и d и их комбинированные массивы.Это был бы питонический способ, хотя на мой вкус он слишком сложен.
edit:
Хорошо, извините, мой плохой.У меня не было Python, когда я написал код.Это правильная версия:
init = []
my_inst.arr = np.array([init + list(myclass.arr.flat) for myclass in my_inst.my_class_inst]).flatten()
Вот что я имел в виду под __add__
(и питонским способом ... независимо от его сложности):
import numpy as np
class MyClass(object):
def __init__(self):
self.a = 37.
self.arr = np.arange(5)
def __add__(self, classToAdd):
a = MyClasses() + self + classToAdd
return a
class MyClasses(object):
def __init__(self):
self.N = 0
self.my_class_inst = np.array([])
self.a = np.array([])
self.arr = np.array([])
def __add__(self, singleClass):
self.my_class_inst = np.hstack([self.my_class_inst, singleClass])
self.a = np.hstack([self.a, singleClass.a])
self.arr = np.hstack([self.arr, singleClass.arr])
self.N = self.my_class_inst.shape[0]
return self
#add_test = MyClass() + MyClass()
add_test = np.sum([MyClass() for i in range(5)])
print add_test.a, add_test.arr, add_test.N
print add_test.__class__, add_test.my_class_inst[0].__class__