2017-06-03 85 views
0

我有一個平滑函數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)。將浮點數組轉換爲整數時的TypeError

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

+0

「代碼不起作用。」不是一個適當的問題描述。在這種情況下,猜測錯誤是相當容易的,但是一般而言,沒有適當問題描述的問題就是主題。這裏的問題是你的函數'f'返回一個數組。要將numpy數組轉換爲整數,您需要'array.astype(int)'。 – ImportanceOfBeingErnest

回答

2

int是一個Python類,它返回一個int實例。 要彩車的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

+0

非常感謝你! – plywoods

1

使用四捨五入,

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

或接近零

def h(x): 
    return np.fix(f(x)); 
四捨五入

而不是含義它在整數轉換期間四捨五入。

+0

非常感謝! – plywoods