Chcę transmitować tablicę b
do kształtu, który by zajął, gdyby był operacją arytmetyczną z inną tablicą a
.Czy istnieje lepszy sposób nadawania tablic?
Na przykład, jeśli a.shape = (3,3)
i b
był skalarem, chcę uzyskać tablicę, której kształt to (3,3)
i jest wypełniony skalarem.
Jednym ze sposobów na to jest tak:
>>> 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]])
Chociaż ta działa praktycznie, nie mogę pomóc, ale czuję, że to wygląda trochę dziwnie, a nie być oczywiste dla kogoś innego patrzenia na kodować to, co próbowałem zrobić.
Czy jest jakiś bardziej elegancki sposób na zrobienie tego? Spojrzałem na dokumentację dla np.broadcast
, ale wolniej to jest o rząd wielkości.
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 dla 'broadcast_arrays()'. – EOL
Perfect! Właśnie tego szukałem. Jestem zaskoczony, że tego nie widziałem; jest tuż obok 'broadcast' w dokumentach. – user545424
W przypadku, gdy jesteś ciekawy, powodem, dla którego mnie to interesuje jest to, że funkcja 'scipy.ndimage.map_coordinates' nie wysyła automatycznie współrzędnych wejściowych, więc muszę to zrobić ręcznie. – user545424