Я ищу какую-то парадигму или реализацию, чтобы эффективно обрабатывать множество наборов связанных N-мерных массивов (ndarray
). В частности, я надеюсь на реализацию, которая позволяет мне нарезать массив целых объектов (например, someObjs = objects[100:200]
) или отдельные атрибуты этих объектов (например, somePars1 = objects.par1[100:200]
) --- в то же время., объединяющий функции «массив объектов» с «объектом массивов»
Для расширения на приведенном выше примере, я мог бы построить следующие подмножества двумя способами:
def subset1(objects, beg, end):
pars1 = [ obj.par1 for obj in objects[beg:end] ]
pars2 = [ obj.par2 for obj in objects[beg:end] ]
return pars1, pars2
def subset2(objects, beg, end):
pars1 = objects.par1[beg:end]
pars2 = objects.par2[beg:end]
return pars1, pars2
И они будут идентичны.
Edit:
Один подход был бы переопределить __getitem__
(и т.д.) методы, что-то подобное,
class Objects(object):
def __init__(self, p1, p2):
self.par1 = p1
self.par2 = p2
...
def __getitem__(self, key):
return Objects(self.p1[key], self.p2[key])
Но это ужасно неэффективно, и он дублирует подмножество. Возможно, есть способ вернуть view
подмножества?
Я не совсем понял вопрос. Вы пытаетесь найти язык, который позволяет разместить индекс в любой из этих позиций? Это противоречит структуре большинства языков. Если у вас есть список объектов, выражение индекса * должно * быть применено непосредственно к списку, а не к элементу. Ваш код правильный в любом случае, в зависимости от того, как вы проектируете свои объекты. Однако вы не можете иметь эту двойственную природу на языке, который отличает характеристики типа. – Prune
@Prune, я не думаю, что это так. См. Пример, который я добавил. Достижение этой функциональности, безусловно, возможно ... но я не могу придумать, как эффективно или эффективно делать это. – DilithiumMatrix
Теперь я понимаю; Благодарю. Имейте в виду, что это по своей сути неэффективно: вы принимаете естественную структуру, но затем накладываете на нее искусственную структуру. Каждая ссылка на искусственную структуру - вид, который вы хотите - требует демонтажа и переупорядочения элементов «правильной» организации. Однако шаблон просмотра, скорее всего, будет способностью к обслуживанию. Я не знаю, говорит ли это вам что-то новое; Скорее всего, я просто подкрепляю то, чего вы боялись. – Prune