Je cherche une comparaison claire des fonctions de type maillage. Malheureusement je ne le trouve pas!
Numpy http://docs.scipy.org/doc/numpy/reference/ fournit
mgrid
ogrid
meshgrid
Scitools http://hplgit.github.io/scitools/doc/api/html/index.html fournit
ndgrid
boxgrid
Idéalement, un tableau résumant tout cela serait parfait!
numpy.meshgrid
est modélisé d'après la commande meshgrid
de Matlab. Il est utilisé pour vectoriser les fonctions de deux variables, afin que vous puissiez écrire
x = numpy.array([1, 2, 3])
y = numpy.array([10, 20, 30])
XX, YY = numpy.meshgrid(x, y)
ZZ = XX + YY
ZZ => array([[11, 12, 13],
[21, 22, 23],
[31, 32, 33]])
Donc, ZZ
contient toutes les combinaisons de x
et y
mises dans la fonction. Quand vous y réfléchissez, meshgrid
est un peu superflu pour les tableaux numpy, car ils diffusent. Cela signifie que vous pouvez faire
XX, YY = numpy.atleast_2d(x, y)
YY = YY.T # transpose to allow broadcasting
ZZ = XX + YY
et obtenir le même résultat.
mgrid
et ogrid
sont des classes auxiliaires qui utilisent la notation d'index pour que vous puissiez créer XX
et YY
directement dans les exemples précédents, sans devoir utiliser linspace
. L'ordre dans lequel les sorties sont générées est inversé.
YY, XX = numpy.mgrid[10:40:10, 1:4]
ZZ = XX + YY # These are equivalent to the output of meshgrid
YY, XX = numpy.ogrid[10:40:10, 1:4]
ZZ = XX + YY # These are equivalent to the atleast_2d example
Je ne suis pas familier avec les outils scitools, mais ndgrid
semble équivalent à meshgrid
, alors que BoxGrid
est en réalité une classe entière pour aider avec ce genre de génération.
np.mgrid
et np.meshgrid()
font la même chose mais les premier et deuxième axes sont permutés:
# 3D
d1, d2, d3 = np.mgrid[0:10, 0:10, 0:10]
d11, d22, d33 = np.meshgrid(np.arange(10),np.arange(10),np.arange(10))
np.array_equal(d1,d11)
rendements False
. Il suffit d'échanger les deux premières dimensions:
d11 = np.transpose(d11,[1,0,2])
np.array_equal(d1,d11)
rendements True
.