np.linalg.norm AxisError:轴1超出维度为1的数组的界限

2024-10-03 11:25:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用np.linalg.norm来计算行向量的范数,然后使用这个范数来规范化行向量,就像我在代码中写的那样。我给向量x一个初始值,但在运行此代码后,我总是得到:

AxisError: axis 1 is out of bounds for array of dimension 1

所以我很困惑,不知道是什么问题。这是我的密码:

import numpy as np
    
def normalizeRows(x):
    x_norm = np.linalg.norm(x, axis=1, keepdims=True)
    x_normalized = x / x_norm
    
    return x_normalized
 
x = np.array([1, 2, 3]) 
print(normalizeRows(x)) 

下面是错误:

---------------------------------------------------------------------------
AxisError                                 Traceback (most recent call last)
<ipython-input-16-155a4cdd9bf8> in <module>
     10 
     11 x = np.array([1, 2, 3])
---> 12 print(normalizeRows(x))
     13 
     14 

<ipython-input-16-155a4cdd9bf8> in normalizeRows(x)
      4 
      5 def normalizeRows(x):
----> 6     x_norm = np.linalg.norm(x, axis=1, keepdims=True)
      7     x_normalized = x / x_norm
      8 

<__array_function__ internals> in norm(*args, **kwargs)

d:\programs\python39\lib\site-packages\numpy\linalg\linalg.py in norm(x, ord, axis, keepdims)
   2558             # special case for speedup
   2559             s = (x.conj() * x).real
-> 2560             return sqrt(add.reduce(s, axis=axis, keepdims=keepdims))
   2561         # None of the str-type keywords for ord ('fro', 'nuc')
   2562         # are valid for vectors

AxisError: axis 1 is out of bounds for array of dimension 1

有人能告诉我为什么这是错误的,以及如何修复它吗?谢谢


Tags: of代码in范数normfornparray
1条回答
网友
1楼 · 发布于 2024-10-03 11:25:56

这会导致轴错误,因为您的数组是1d数组,并且因为:
“在多维NumPy数组中,轴1是第二个轴。当我们谈论二维和多维数组时,轴1是水平穿过列的轴”,引自link

你所要做的就是把你的轴改成0

import numpy as np

def normalizeRows(x):
    x_norm = np.linalg.norm(x, axis=0, keepdims=True)
    x_normalized = x / x_norm
    
    return x_normalized
 
x = np.array([1, 2, 3]) 
print(normalizeRows(x)) 

[0.26726124 0.53452248 0.80178373]

相关问题 更多 >