8

Pyzo 内で Python 3 を使用しています。linalg.norm 関数が axis 引数を認識しない理由を教えてください。

このコード:

c = np.array([[ 1, 2, 3],[-1, 1, 4]])
d=linalg.norm(c, axis=1)

エラーを返します:

TypeError: norm() が予期しないキーワード引数 'axis' を取得しました

4

2 に答える 2

11

linalg.normaxis引数を受け入れません。あなたはそれを回避することができます:

np.apply_along_axis(np.linalg.norm, 1, c)
# array([ 3.74165739,  4.24264069])

または、より高速にするために、次のように自分で実装します。

np.sqrt(np.einsum('ij,ij->i',c,c))
# array([ 3.74165739,  4.24264069])

タイミングについて:

timeit np.apply_along_axis(np.linalg.norm, 1, c)
10000 loops, best of 3: 170 µs per loop

timeit np.sqrt(np.einsum('ij,ij->i',c,c))
100000 loops, best of 3: 10.7 µs per loop
于 2013-11-23T22:31:35.120 に答える
5

numpy以下のバージョンでは引数を1.8 linalg.norm取りません。質問へのコメントで Warren Weckesserが指摘したように、使用して目的の結果を得ることができます。axisnp.apply_along_axis

import numpy as np
from numpy import linalg

c = np.array([[ 1, 2, 3],[-1, 1, 4]])

d = np.apply_along_axis(linalg.norm, 1, c)

結果:

>>> d
array([ 3.74165739,  4.24264069])
于 2013-11-23T22:31:27.683 に答える