我有一个平滑函数f(x)= sin(x / 5)* exp(x / 10)+ 5 * exp(-x / 2) 任务是在1到30的间隔上探索非平滑函数h(x)= int(f(x))。换句话说,f(x)的每个值都转换为int类型,函数需要只有整数值。我试图在matplotlib的帮助下构建h(x)。
import math
import numpy as np
from scipy.optimize import minimize
from scipy.linalg import *
import matplotlib.pyplot as plt
def f(x):
return np.sin(x / 5.0) * np.exp(x / 10.0) + 5 * np.exp((-x / 2.0))
def h(x):
return int(f(x))
x = np.arange(1, 30)
y = h(x)
plt.plot(x, y)
plt.show()
代码不起作用。运行代码会引发
TypeError: only length-1 arrays can be converted to Python scalars
使用VS我得到:
答案 0 :(得分:2)
int
是一个返回单个int
实例的Python类。
要将NumPy浮点数组转换为NumPy整数数组,请使用astype(int)
:
import numpy as np
import matplotlib.pyplot as plt
def f(x):
return np.sin(x / 5.0) * np.exp(x / 10.0) + 5 * np.exp((-x / 2.0))
def h(x):
return f(x).astype(int)
x = np.arange(1, 30)
y = h(x)
plt.plot(x, y)
plt.show()
答案 1 :(得分:1)
使用四舍五入,
def h(x):
return np.floor(f(x));
或向零舍入
def h(x):
return np.fix(f(x));
而不是整数转换期间的隐式舍入。