将浮点数组转换为整数时的TypeError

时间:2017-06-03 16:39:40

标签: python numpy

我有一个平滑函数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我得到:

enter image description here

2 个答案:

答案 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()

enter image description here

答案 1 :(得分:1)

使用四舍五入,

def h(x):
    return np.floor(f(x));

或向零舍入

def h(x):
    return np.fix(f(x));

而不是整数转换期间的隐式舍入。