goodmorning. Supposons que j'ai une matrice bidimensionnelle (appelez-le mat (x, y)) créé avec NUMPY. Sur ce tableau, je dois effectuer des opérations. Comment puis-je réécrire les 2 loops suivants pour les boucles, par exemple en utilisant np.nditer () code> ou quelque chose d'autre qui utilise une méthode numpy? Merci. for i in range(x):
for j in range(y):
if i == 0: MAT[i][j] = j
elif j == 0: MAT[i][j] = i
4 Réponses :
Vous pouvez simplement définir la première ligne et la première colonne comme celle-ci résultat p>
Puisque vous vous attribuez simplement aux valeurs 0,1, ... à la première rangée et colonne Il n'y a pas besoin d'une double boucle avec si les conditions de l'intérieur.
Il suffit d'attribuer les valeurs à la première ligne: p> et à la première colonne: p>
Vous pouvez fondamentalement attribuer Vous pouvez le faire soit codant dur la nature 2D de votre entrée ( Notez que double trancher ( par exemple Enfin, la nidification des boucles est largement inutilisée dans votre code et vous pourriez la réécrire avec les deux boucles étant séparées (ce qui est beaucoup plus efficace): P> np.arange () code> à une tranchée appropriée de votre entrée. FOO2 ( ) code>) ou, pour les dimensions arbitraires à l'aide d'une trancheuse définie dynamiquement ( Foon () code>): p> mat [i] [j] [j] code>), tout en travaillant, n'est pas aussi efficace que la coupe à l'aide d'un tuple (par exemple, mat [i, j] p>). P>
funcs = foo, foo2, foon, fool, fool_nb
shape = 300, 400
for func in funcs:
arr = np.zeros(shape)
print(func.__name__)
%timeit func(arr)
print()
# foo
# 100 loops, best of 3: 6.53 ms per loop
# foo2
# 100000 loops, best of 3: 4.28 µs per loop
# foon
# 100000 loops, best of 3: 6.99 µs per loop
# fool
# 10000 loops, best of 3: 89.8 µs per loop
# fool_nb
# 1000000 loops, best of 3: 1.01 µs per loop
Vous n'avez pas besoin d'une boucle, il suffit d'assigner à la tranche