假设你有一个Python类,它封装了一些数据:
import numpy
from dataclasses import dataclass
@dataclass
class A:
a: float
b: float
我们可以创建一个A
的示例,它包含数组而不是简单的浮点数:
a_vals = numpy.linspace(0, 1)
b_vals = numpy.linspace(0, 1)
ma, mb = numpy.meshgrid(a_vals, b_vals, indexing="ij")
# Now the instance
a_instance = A(ma, mb)
或者,可以创建A
示例的数组
a_instances = numpy.empty((50, 50), dtype=object)
for i in range(50):
for j in range(50):
a_instances[i, j] = A(a_vals[i], b_vals[j])
但这似乎要麻烦得多,因为涉及到实际的循环。有没有更好的方法来创建a_vals
和b_vals
(或它们的meshgrid)上的A
示例数组?numpy打算用什么方法来实现这一点?
2条答案
按热度按时间jmo0nnb31#
我要提醒的是,“intended by numpy”倾向于避免使用
dtype=object
,而是使用(X, Y, 2)
形状的数组。如果你确实想得到一个
A
对象的形状(X, Y)
数组,那么np.vectorize
和broadcasting可以工作:输出:
r1zk6ea12#
你可以使用numpy.vectorize函数在a_vals和B_vals上创建一个类A的示例数组。这个函数接受一个Python函数作为输入,并返回一个可以对NumPy数组进行操作的新函数。下面是一个例子:
这将创建类A示例的2D数组,其中a和B属性的值取自a_vals和b_vals的网格