对于这样的正则函数

def f(t):
    return t*t

我可以传递both个值或一个NumPy数组而不会出现问题.E、 g.本工程:

T = 1
print(f(T))

times = np.mgrid[0 : T : 100j]
values = f(times)

现在我创建了一个具有__call__个函数的类

class rnd_elemental_integrand:
    
    def __init__(self, n_sections, T):
        
        self.n_sections = n_sections
        self.T = T
        self.generate()
        
    def generate(self):
        self.values = norm.rvs(size = (self.n_sections + 1,), scale = 1)

    def __call__(self, t):
        ind = int(t * (self.n_sections/self.T))
        return self.values[ind]

但是对于这个类方法,我可以not传递一个NumPyarray.E、 g.本

T = 5
elem_int_sections = 10

rnd_elem = rnd_elemental_integrand(elem_int_sections, T)

print(rnd_elem(T))
times = np.mgrid[0 : T : 100j]
values = rnd_elem(times)

生成输出

0.43978851468955377
Traceback (most recent call last):
  File "/Users/gnthr/Desktop/Programming/Python/StochAna/stochana.py", line 138, in <module>
    values = rnd_elem(times)
  File "/Users/gnthr/Desktop/Programming/Python/StochAna/stochana.py", line 117, in __call__
    ind = int(t * (self.n_sections/self.T))
TypeError: only size-1 arrays can be converted to Python scalars

从其他帖子中,我知道通过np.函数对__call__方法进行矢量化是可行的,但例如,上面的函数f也没有矢量化,可以很好地处理这两种类型的输入.是否可以使该类__call__方法同时接受两种参数类型(浮点和浮点数组)?

推荐答案

Fix:,无需进行型式判断.

由于np.array可以接受np.array和标量的输入,我们可以创建int类型的新np.array

ind = np.array(t * (self.n_sections/self.T), dtype=int)

测试用例:

from scipy.stats import norm
T = 5
elem_int_sections = 10

rnd_elem = rnd_elemental_integrand(elem_int_sections, T)

print(rnd_elem(T))
times = np.mgrid[0 : T : 100j]
print (rnd_elem(times))

输出:

-0.7828585207846585
[-1.00037782 -1.00037782 -1.00037782 -1.00037782 -1.00037782 -1.00037782
 -1.00037782 -1.00037782 -1.00037782 -1.00037782  1.35744571  1.35744571
  1.35744571  1.35744571  1.35744571  1.35744571  1.35744571  1.35744571
  1.35744571  1.35744571  0.65442428  0.65442428  0.65442428  0.65442428
  0.65442428  0.65442428  0.65442428  0.65442428  0.65442428  0.65442428
  0.76685108  0.76685108  0.76685108  0.76685108  0.76685108  0.76685108
  0.76685108  0.76685108  0.76685108  0.76685108  0.48888641  0.48888641
  0.48888641  0.48888641  0.48888641  0.48888641  0.48888641  0.48888641
  0.48888641  0.48888641  0.62681856  0.62681856  0.62681856  0.62681856
  0.62681856  0.62681856  0.62681856  0.62681856  0.62681856  0.62681856
  1.05695641  1.05695641  1.05695641  1.05695641  1.05695641  1.05695641
  1.05695641  1.05695641  1.05695641  1.05695641 -0.0634099  -0.0634099
 -0.0634099  -0.0634099  -0.0634099  -0.0634099  -0.0634099  -0.0634099
 -0.0634099  -0.0634099  -0.00167191 -0.00167191 -0.00167191 -0.00167191
 -0.00167191 -0.00167191 -0.00167191 -0.00167191 -0.00167191 -0.00167191
  1.16756173  1.16756173  1.16756173  1.16756173  1.16756173  1.16756173
  1.16756173  1.16756173  1.16756173 -0.78285852]

Python相关问答推荐

aiohTTP与pytest的奇怪行为

根据多列和一些条件创建新列

合并同名列,但一列为空,另一列包含值

删除pandas rame时间序列列中未更改的值

剧作家Python:expect(locator).to_be_visible()vs locator.wait_for()

如何让 turtle 通过点击和拖动来绘制?

如何在箱形图中添加绘制线的传奇?

图像 pyramid .难以创建所需的合成图像

在Python argparse包中添加formatter_class MetavarTypeHelpFormatter时, - help不再工作""""

实现自定义QWidgets作为QTimeEdit的弹出窗口

cv2.matchTemplate函数匹配失败

Python+线程\TrocessPoolExecutor

Asyncio:如何从子进程中读取stdout?

在单个对象中解析多个Python数据帧

如何并行化/加速并行numba代码?

joblib:无法从父目录的另一个子文件夹加载转储模型

在不同的帧B中判断帧A中的子字符串,每个帧的大小不同

重置PD帧中的值

剪切间隔以添加特定日期

搜索按钮不工作,Python tkinter