Voglio trasmettere un array b
alla forma che sarebbe necessario se fosse in un'operazione aritmetica con un altro array a
.C'è un modo migliore per trasmettere gli array?
Ad esempio, se a.shape = (3,3)
e era uno scalare, voglio ottenere un array la cui forma è (3,3)
e viene riempito con lo scalare.
Un modo per farlo è come questo:
>>> import numpy as np
>>> a = np.arange(9).reshape((3,3))
>>> b = 1 + a*0
>>> b
array([[1, 1, 1],
[1, 1, 1],
[1, 1, 1]])
Anche se questo funziona in pratica, non posso fare a meno di sentire che sembra un po 'strano, e non sarebbe evidente a qualcun altro a guardare il codice che stavo cercando di fare.
Esiste un modo più elegante per farlo? Ho esaminato la documentazione di np.broadcast
, ma sono gli ordini di grandezza più lenti.
In [1]: a = np.arange(10000).reshape((100,100))
In [2]: %timeit 1 + a*0
10000 loops, best of 3: 31.9 us per loop
In [3]: %timeit bc = np.broadcast(a,1);np.fromiter((v for u, v in bc),float).reshape(bc.shape)
100 loops, best of 3: 5.2 ms per loop
In [4]: 5.2e-3/32e-6
Out[4]: 162.5
+1 per 'broadcast_arrays()'. – EOL
Perfetto! Questo e 'esattamente quello che stavo cercando. Sono sorpreso di non averlo visto; è proprio accanto a 'broadcast' nei documenti. – user545424
Nel caso in cui sei curioso, la ragione per cui sono interessato a questo è che la funzione 'scipy.ndimage.map_coordinates' non trasmette automaticamente le coordinate di input, quindi devo farlo manualmente. – user545424