我正在生成一個在 [0,1] 范圍內定義的簡單正弦函式,如下所示。但是我在分配時遇到了索引錯誤function[i]。我試圖設定x_n = int(x_n)一些具有相同錯誤的問題,但這只會產生更多錯誤。
import numpy as np
function = np.zeros(20)
x_n=np.arange(0,1,0.05) #[0,1]
for i in x_n:
function[i] = np.sin(2*np.pi*i)
Notex_n的步長為 0.05,因為我需要生成 20 個從 0 到 1 的值。
uj5u.com熱心網友回復:
您不需要創建陣列零并在其中插入數字,您可以使用矢量化魔法來執行此操作,NumPy如下所示:
x_n=np.arange(0,1,0.05) #[0,1]
np.sin(x_n*np.pi*2)
輸出:
array([ 0.00000000e 00, 3.09016994e-01, 5.87785252e-01, 8.09016994e-01,
9.51056516e-01, 1.00000000e 00, 9.51056516e-01, 8.09016994e-01,
5.87785252e-01, 3.09016994e-01, 1.22464680e-16, -3.09016994e-01,
-5.87785252e-01, -8.09016994e-01, -9.51056516e-01, -1.00000000e 00,
-9.51056516e-01, -8.09016994e-01, -5.87785252e-01, -3.09016994e-01])
uj5u.com熱心網友回復:
問題是 i 是浮點數,而陣列索引是整數。您應該將代碼更改為
import numpy as np
function = np.zeros(20)
x_n=np.arange(0,1,0.05) #[0,1]
for i in x_n:
function[int(i*20)] = np.sin(2*np.pi*i)
uj5u.com熱心網友回復:
一個基本的 Python 迭代工具是enumerate. 有了這個,你可以迭代一個浮點陣列,并且仍然得到一個連續的整數索引。
In [16]: arr = np.zeros(20)
...: x_n=np.arange(0,1,0.05) #[0,1]
...:
...: for i,v in enumerate(x_n):
...: arr[i] = np.sin(2*np.pi*v)
...:
In [17]: arr
Out[17]:
array([ 0.00000000e 00, 3.09016994e-01, 5.87785252e-01, 8.09016994e-01,
9.51056516e-01, 1.00000000e 00, 9.51056516e-01, 8.09016994e-01,
5.87785252e-01, 3.09016994e-01, 1.22464680e-16, -3.09016994e-01,
-5.87785252e-01, -8.09016994e-01, -9.51056516e-01, -1.00000000e 00,
-9.51056516e-01, -8.09016994e-01, -5.87785252e-01, -3.09016994e-01])
另一種方法是使用 迭代for i in range(len(x_n)):,但enumerate更清晰。
但是您根本不需要迭代(在python中):
In [18]: np.sin(2*np.pi*x_n)
Out[18]:
array([ 0.00000000e 00, 3.09016994e-01, 5.87785252e-01, 8.09016994e-01,
9.51056516e-01, 1.00000000e 00, 9.51056516e-01, 8.09016994e-01,
5.87785252e-01, 3.09016994e-01, 1.22464680e-16, -3.09016994e-01,
-5.87785252e-01, -8.09016994e-01, -9.51056516e-01, -1.00000000e 00,
-9.51056516e-01, -8.09016994e-01, -5.87785252e-01, -3.09016994e-01])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/450774.html
上一篇:將np.where用于嵌套串列
下一篇:如何使用nptile重塑陣列
