[英]Python class __call__ function is not vectorized
我正在嘗試使用__call__
dunder 為自定義類繪制函數
import math
import numpy as np
import matplotlib.pyplot as plt
class F:
def __init__(self, n, m):
self._n = n
self._m = m
def __call__(self, x):
return math.sin(self._n * x) * math.cos(self._m * x)
u = F(1,1)
v = F(1,1)
x_array = np.linspace(0, 2*np.pi, 20)
u_array = u(x_array)
v_array = v(x_array)
plt.plot(u_array, v_array)
plt.show()
但是,執行代碼時,我收到此錯誤
Traceback (most recent call last):
File "F.py", line 18, in <module>
u_array = u(x_array)
File "F.py", line 11, in __call__
return math.sin(self._n * x) * math.cos(self._m * x)
TypeError: only size-1 arrays can be converted to Python scalars
似乎調用u_array = u(x_array)
將整個 x_array 發送到函數,而不是以矢量化的方式進行。
請幫忙
使用numpy
向量化函數而不是來自math
函數:
def __call__(self, x):
return np.sin(self._n * x) * np.cos(self._m * x)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.