gpt4 book ai didi

python - 连接作为 python 中的类实例属性的 numpy 数组

转载 作者:行者123 更新时间:2023-12-01 06:03:19 24 4
gpt4 key购买 nike

我正在尝试使用一个类,该类将另一个类的多个实例串在一起作为对象的 numpy 数组。我希望能够连接 numpy 数组中包含的实例的属性。我想出了一种用一堆 for 循环的草率方法来做到这一点,但我认为必须有一种更优雅、Pythonic 的方法来做到这一点。下面的代码做了我想要的,但我想知道是否有更干净的方法来做到这一点:

import numpy as np


class MyClass(object):

def __init__(self):
self.a = 37.
self.arr = np.arange(5)


class MyClasses(object):

def __init__(self):
self.N = 5
# number of MyClass instances to become attributes of this
# class

def make_subclas_arrays(self):
self.my_class_inst = np.empty(shape=self.N, dtype="object")
for i in range(self.N):
self.my_class_inst[i] = MyClass()

def concatenate_attributes(self):
self.a = np.zeros(self.N)
self.arr = np.zeros(self.N * self.my_class_inst[0].arr.size)
for i in range(self.N):
self.a[i] = self.my_class_inst[i].a
slice_start = i * self.my_class_inst[i].arr.size
slice_end = (i + 1.) * self.my_class_inst[i].arr.size
self.arr[slice_start:slice_end] = (
self.my_class_inst[i].arr )

my_inst = MyClasses()
my_inst.make_subclas_arrays()
my_inst.concatenate_attributes()

编辑:根据 HYRY 的回复,这些方法现在如下所示:

def make_subclass_arrays(self):
self.my_class_inst = np.array([MyClass() for i in range(self.N)])

def concatenate_attributes(self):
self.a = np.hstack([i.a for i in self.my_class_inst])
self.arr = np.hstack([i.arr for i in self.my_class_inst])

最佳答案

您可以使用 numpy.hstack() 来连接数组:

def concatenate_attributes(self):
self.a = np.hstack([o.a for o in self.my_class_inst])
self.arr = np.hstack([o.arr for o in self.my_class_inst])

另请参阅

vstack :垂直(按行)顺序堆叠数组。dstack :按深度顺序(沿第三轴)堆叠数组。concatenate :将一系列数组连接在一起。

关于python - 连接作为 python 中的类实例属性的 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9215174/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com