我理解为什么“标准”类型的numpy数组几乎总是比包含相同类型数据的列表更高效。因此,最好养成使用numpy数组处理简单内容的习惯,是吗?在
不过,我想知道使用numpy数组“存储”自定义类实例的优点和缺点是什么,而不是使用列表。在
考虑
import numpy as np
class Foo:
def __init__(self, name):
self.name = name
class Bar:
def __init__(self, name):
self.name = name
self.myFoos = np.zeros(0, dtype = Foo)
def add_foo(self, some_foo):
self.myFoos = np.append(self.myFoos, some_foo)
我可以很好地使用
^{pr2}$做这个决定时我应该记住什么?在
Foo类的复杂性有很大的区别吗? (在我的用例中,它可能包含20到30个标准类型,一个或两个固定大小的整数数组,然后是大约10个简单方法。)
myFoos中典型的foo数量有什么不同吗? (在我的用例中,它将是0到10)
处理myFoos的次数有什么不同吗? (在我的实际用例中,在用户操作之间可能会调用10到20次。)
尽管代码运行良好,但pyCharm不喜欢最后一个append语句,它警告我
Expected type 'Union[ndarray, iterable]' got 'Foo' instead.
提前谢谢!在
我之前已经讨论过如何生成自定义对象的数组—我将尝试查找一个好的讨论。在
但是,首先要注意几点
真的是
np.zeros(0, dtype=object)
。有标准的数据类型,还有object
。它保存指向内存中其他位置的对象的指针。和列表一样,这些可以是任何东西—数字、字符串、列表、数组、Foo()
、None
等等,并且可以更改。在远离
^{pr2}$np.append
。它不是list append的好替代品。如果必须使用其他数组创建一个新数组,请学习使用concatenate
(这包括正确获取维度)。在{7}它们基本上与cdype列表相同,但它们不能用2d}来改变它们的形状。对象数据类型数组上的许多操作都是通过列表理解来执行的。在
Replace elements in array with class instances
Pass output from class instance as input to another
我回答了这个海报上的几个问题(在同一时间段内搜索),他试图使用自定义类的数组。仅仅访问这样一个对象的属性就需要一个列表理解。在
相关问题 更多 >
编程相关推荐