Topic: evitare loops concatenati per sostituire i valori in matrici  (Letto 57 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Denis

  • python unicellularis
  • *
  • Post: 8
  • Punti reputazione: 0
    • Mostra profilo
Buongiorno, vorrei chiedere un modo per evitare cicli "for" concatenati molto costosi per sostituire diversi valori di una matrice:

a titolo di esempio, una volta definita la matrice m di dimensioni 1400x1200 contenente numeri i tipo float,

for i, j  in itertools.product(range(1400), range(1200)):
     if m == cond:
         m[i][j] = func(m[i][j])


ho letto online di procedure "List Comprehensions" che attualmente utilizzo per creare e allocare matrici. Tuttavia non capisco se si possono usare anche per sostituire opportunamente i valori all'interno di una matrice bi/tri/multi dimensionale.

ringrazio anticipatamente

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 354
  • Punti reputazione: 0
    • Mostra profilo
Re:evitare loops concatenati per sostituire i valori in matrici
« Risposta #1 il: Febbraio 22, 2021, 16:33 »
Trovo un po' strana la Tua domanda, non è che con le Comprehensions si possa far di tutto, comunque, sulla falsa riga dell'esempio da Te posto:
>>> def foo(x):
return [x[0]-1, x[1]+1]

>>> import itertools
>>> sum_even = []
>>> for i,j in itertools.product(range(4), range(3)):
if not (i + j) % 2:
sum_even.append(foo([i,j]))


>>> for e in sum_even:
print(e)


[-1, 1]
[-1, 3]
[0, 2]
[1, 1]
[1, 3]
[2, 2]
>>> even_sum = [foo([x, y]) for x,y in itertools.product(range(4),
     range(3)) if not(x+y)%2]
>>> for e in even_sum:
print(e)


[-1, 1]
[-1, 3]
[0, 2]
[1, 1]
[1, 3]
[2, 2]
>>>


Soddisfa la domanda?
[Edit] o forse, guardando meglio, intendevi un qualcosa del genere?
>>> even_sum = [foo([x, y]) if not (x+y)%2 else [x,y] for x,y in
    itertools.product(range(4),range(3))]
>>> for e in even_sum:
print(e)


[-1, 1]
[0, 1]
[-1, 3]
[1, 0]
[0, 2]
[1, 2]
[1, 1]
[2, 1]
[1, 3]
[3, 0]
[2, 2]
[3, 2]
>>>

con restituzione anche del prodotto invariato quando la condizione non è soddisfatta?
« Ultima modifica: Febbraio 22, 2021, 16:47 da nuzzopippo »

Offline Denis

  • python unicellularis
  • *
  • Post: 8
  • Punti reputazione: 0
    • Mostra profilo
Re:evitare loops concatenati per sostituire i valori in matrici
« Risposta #2 il: Febbraio 24, 2021, 10:38 »
Grazie mille per la risposta. La seconda alternativa da te proposta rispecchia le mie esigenze. Grazie