Quiero transmitir una matriz b
a la forma que tomaría si estuviera en una operación aritmética con otra matriz a
.¿Hay una mejor manera de transmitir matrices?
Por ejemplo, si a.shape = (3,3)
y b
fuera un escalar, quiero obtener una matriz cuya forma es (3,3)
y se completa con el escalar.
Una forma de hacerlo es la siguiente:
>>> 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]])
Aunque esto funciona prácticamente, no puedo evitar sentir que parece un poco raro, y no sería obvio para alguien más mirando el codifica lo que estaba tratando de hacer.
¿Hay alguna forma más elegante de hacer esto? Miré la documentación para np.broadcast
, pero es de órdenes de magnitud más lenta.
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 para 'broadcast_arrays()'. – EOL
¡Perfecto! Esto es exactamente lo que estaba buscando. Me sorprende que no lo haya visto; está justo al lado de 'broadcast' en los documentos. – user545424
En caso de que tenga curiosidad, la razón por la que estoy interesado en esto es porque la función 'scipy.ndimage.map_coordinates' no transmite automáticamente las coordenadas de entrada, así que tengo que hacerlo manualmente. – user545424