我知道以前有人問過類似的問題,但我是 python 的初學者,我不知道我做錯了什么,因為它一直給我這個錯誤:unsupported operand type(s) for: 'int' and 'range'.
我試圖通過的V幾個值(50?500000)給我通過這個公式背E的值:y[i 1] = 2 * y[i] - y[i-1] (-2*(dx**2) * (E - V) * y[i])。
這是我到目前為止所做的:
import numpy as np
dx = 0.001
xlim = 500000
y = np.arange(xlim 1)
V = range(50, 500000)
def func(E):
for i in range(50, 500000):
y[i 1] = 2 * y[i] - y[i-1] (-2*(dx**2) * (E - V) * y[i])
return y[i 1]
a = map(func, V)
print(list(a))
uj5u.com熱心網友回復:
在您的函式呼叫中,您有(E - V),這會導致您的例外。
EV通過map()呼叫設定為一個(整數)值。所以你試圖在整數和 a 之間做減法range。錯誤是預料之中的。
如果您試圖在索引/串列之間進行一對一的關聯,也許您可??以更改:
(E - V)
到:
(E - list(V)[i])
這應該會使錯誤消失,但它的編碼很差,性能也很差。但希望它可以為您提供方向,如果它與您正在嘗試做的事情一致。如果是,您可以在開始時將范圍轉換為串列一次,然后使用該轉換而不是V在回圈中。
您可能還需要重新評估您的方程式以確保邏輯正確。
uj5u.com熱心網友回復:
看起來您需要除錯幫助。你說“它一直給我這個錯誤”,這意味著你不理解這個錯誤,你一直在嘗試同樣的事情,或者類似的事情。這就像把你的頭撞在墻上然后抱怨它一直在痛:)
您的功能 - 范圍更小。在代碼作業之前不需要使用大范圍:
In [525]: def func(E):
...: for i in range(1,4):
...: y[i 1] = 2 * y[i] - y[i-1] (-2*(dx**2) * (E - V) * y[i])
...: return y[i 1]
...:
In [526]: dx=0.001
In [527]: y = np.arange(6)
In [528]: V = range(1,4)
讓我們試試這個只有 1 個數字的函式。在通過地圖傳遞整個范圍之前,這必須起作用。
In [529]: func(1)
Traceback (most recent call last):
File "<ipython-input-529-9ed089a72395>", line 1, in <module>
func(1)
File "<ipython-input-525-9fc020925ab9>", line 3, in func
y[i 1] = 2 * y[i] - y[i-1] (-2*(dx**2) * (E - V) * y[i])
TypeError: unsupported operand type(s) for -: 'int' and 'range'
這就是你不斷得到的錯誤。該錯誤與map(func, V).
那么range你的函式在哪里呢? V是一個range,對吧?所以該功能正在嘗試執行以下操作:
In [530]: 1 - V
Traceback (most recent call last):
File "<ipython-input-530-aa851a38238f>", line 1, in <module>
1 - V
TypeError: unsupported operand type(s) for -: 'int' and 'range'
同樣的錯誤。當您在長時間計算中遇到錯誤時,您需要隔離出現問題的步驟。您可以將計算拆分為多行,或者在這種情況下,注意錯誤訊息。
如果我們將范圍擴展為完整串列會怎樣:
In [531]: V = list(V)
In [532]: 1 - V
Traceback (most recent call last):
File "<ipython-input-532-51e70f02e628>", line 1, in <module>
1 - V
TypeError: unsupported operand type(s) for -: 'int' and 'list'
也沒有為串列定義加法(期望list1 list2連接)
為numpy陣列定義了逐元素加法:
In [533]: V = np.array(V)
In [534]: 1 - V
Out[534]: array([ 0, -1, -2])
但是當我們用那個陣列嘗試你的函式時V:
In [535]: func(1)
TypeError: only size-1 arrays can be converted to Python scalars
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<ipython-input-535-9ed089a72395>", line 1, in <module>
func(1)
File "<ipython-input-525-9fc020925ab9>", line 3, in func
y[i 1] = 2 * y[i] - y[i-1] (-2*(dx**2) * (E - V) * y[i])
ValueError: setting an array element with a sequence.
E-V是一個數字陣列,如 [534] 中所示。這意味著完整的計算也會產生一個陣列。如果這不是很明顯,那么您還沒有閱讀足夠的基本numpy.
但這y[i 1]是一個號碼的插槽。因此出現了 ValueError。
我現在就退出,因為我不知道你想做什么,我也不會去猜測。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/401963.html
下一篇:Python陣列的切片
