Méthode 1: « simulation » 2D grille
Je pensais à faire un tableau avec toutes les valeurs x et l'autre avec toutes les valeurs y, mais, alors, je ne sais pas comment calculer la condition avec toutes ces valeurs.
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
Méthode 2: boucles imbriquées
Une autre idée que je devais était de prendre une seule valeur de x et de le tester avec toutes les valeurs y, puis augmenter à nouveau x et d'essai et encore.
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
Quelle méthode choisir?
Comment aborder ce problème?
Cela dépend entièrement de ce que vous voulez faire avec (x, y)
paires qui évaluent à True
. Si vous éditez votre question avec un peu plus de conseils, il pourrait devenir évident quelle est la solution la plus simple pour votre cas d'utilisation.
Par exemple, Méthode 1 fournit des tableaux 2D pour tracer l'espace de solution tandis que Méthode 2 fournit python compact list
s pour databasing.
Attention: les opérateurs conditionnels
Il faut aussi souligner que les expressions mathématiques avec plusieurs opérateurs conditionnels ne font pas de sens en Python. Cette ligne:
cond1 = func1 < func2 < 1
si évaluée en utilisant l'ordre standard des opérations comme cond1 = (func1 < func2) < 1
aurait une évaluation intermédiaire de cond1 = (True/False) < 1
, qui implicitement refondre True
comme 1
et False
comme 0
, mais ne serait pas évaluer correctement l'expression mathématique func1 < func2 < 1
.
EDIT:
@ (Eric DUMINIL) les réponses de fournir des concepts alternatifs pour résoudre le problème mathématique sous-jacente, les deux méthodes ci-dessus suppose que votre problème devait être résolu numériquement sur un maillage discret, et ayant ces points de solutions discrètes étaient nécessaires pour tout code suivi.
@ La réponse d'Uriel peut sembler fonctionner, mais voir ma note sur les opérateurs conditionnels pour savoir pourquoi cela peut être trompeur.
En outre, j'ai initialement tapé and
pour combiner les instructions conditionnelles 2D, mais cela est incorrect et entraîne une erreur. Utilisez np.logical_and
à la place.