方法1:2D「模擬」網格
我在想使所有的x值的數組,另一個與所有y值,但是的話,我不知道該怎麼用所有這些值計算條件。
import numpy as np
x = np.arange(-10, 10, 0.1)
y = np.arange(-10, 10, 0.1)
# Create 2D simulation meshes for x and y.
# You can read the API entry for meshgrid to learn about options for index
# ordering, mesh sparsity, and memory copying
X, Y = np.meshgrid(x, y)
func1 = X + Y - 1
func2 = X * Y
cond = np.logical_and(func1 < func2, func2 < 1.0) # intrinsic `and` does not work here
# now cond can be used as a 'mask' for any masked-array operations on X and Y
# including for numpy boolean indexing:
print('(X, Y) pairs')
for xy_pair in zip(X[cond], Y[cond]):
print xy_pair
方法2:嵌套循環
我有另一個想法是採取x的一個值,並與所有的y值進行測試,然後再增加x和測試再次。
import numpy as np # no slower or memory-intensive than `from numpy import arange`
X = []
Y = []
for y in np.arange(-10, 10, 0.1):
for x in np.arange(-10, 10, 0.1):
if (x+y-1 < x*y) and (x*y < 1.0):
X.append(x)
Y.append(y)
print('(X, Y) pairs')
for xy_pair in zip(X, Y):
print xy_pair
哪種方法來選擇呢?
我該如何解決這個問題?
這完全取決於你想要做什麼(x, y)
對評估爲True
。如果你用更多的指導來編輯你的問題,那麼對你的用例來說,更直接的解決方案可能會變得很明顯。
例如,方法1提供二維數組用於繪製解空間而方法2提供緊湊蟒list
S代表數據庫福。
警告:有條件的經營者
還必須指出的是,與多個條件運算符的數學表達式沒有意義Python編寫的。這條線:
cond1 = func1 < func2 < 1
如果使用操作的標準順序cond1 = (func1 < func2) < 1
將有cond1 = (True/False) < 1
中間評價,這將隱含改寫True
爲1
和False
爲0
評估,但不會正確評價數學表達式func1 < func2 < 1
。
編輯:
@(埃裏克Duminil)的答案爲解決基本的數學問題提供替代的概念,上面假定這兩種方法需要被上離散網格數值求解的問題,並且具有這些離散的解決方案點對於隨後的任何代碼都是必需的
@Uriel的答案可能看起來有效,但請參閱我關於條件運算符的說明,以解釋爲什麼這可能會引起誤解。
此外,我最初鍵入and
來組合2D條件語句,但這是不正確的,並導致錯誤。改爲使用np.logical_and
。