divisée numpy le long de l'axe
Est-il un numpy fonction de diviser un tableau le long d'un axe avec des éléments provenant d'un autre tableau? Par exemple, supposons que j'ai un tableau un avec la forme (l,m,n) et un tableau b avec la forme (m,); je suis à la recherche de quelque chose d'équivalent à:
def divide_along_axis(a,b,axis=None):
if axis is None:
return a/b
c = a.copy()
for i, x in enumerate(c.swapaxes(0,axis)):
x /= b[i]
return c
Par exemple, c'est utile lors de la normalisation d'un tableau de vecteurs:
>>> a = np.random.randn(4,3)
array([[ 1.03116167, -0.60862215, -0.29191449],
[-1.27040355, 1.9943905 , 1.13515384],
[-0.47916874, 0.05495749, -0.58450632],
[ 2.08792161, -1.35591814, -0.9900364 ]])
>>> np.apply_along_axis(np.linalg.norm,1,a)
array([ 1.23244853, 2.62299312, 0.75780647, 2.67919815])
>>> c = divide_along_axis(a,np.apply_along_axis(np.linalg.norm,1,a),0)
>>> np.apply_along_axis(np.linalg.norm,1,c)
array([ 1., 1., 1., 1.])
source d'informationauteur user545424
Vous devez vous connecter pour publier un commentaire.
Pour l'exemple que vous avez donné: la division d'un (l,m,n) matrice (m,), vous pouvez utiliser np.newaxis:
Vous pouvez lire tout sur les règles de la radiodiffusion ici. Vous pouvez également utiliser newaxis plus d'une fois si nécessaire. (par exemple, pour diviser une forme (3,4,5,6) tableau par une forme (3,5) array).
À partir de ma compréhension de la documentation, à l'aide de newaxis + de radiodiffusion évite également tout élément de matrice de la copie.
Indexation, newaxis etc sont décrits plus en détail ici maintenant. (Documentation réorganisé depuis cette réponse postée).
Je pense que vous pouvez obtenir ce comportement avec numpy l'habitude de radiodiffusion comportement:
Si j'ai bien interprété.
Si vous voulez l'autre axe, on pourrait transposer tout: