numpy中求解範數(numpy.linalg.norm)以及各階範數詳解

Codefmeister 發表於 2020-11-21

numpy.linalg.norm

語法

numpy.linalg.norm(x,ord=None,axis=None,keepdims=False)

Parameters

  • x: array_like

Input array. If axis is None, x must be 1-D or 2-D, unless ord is None. If both axis and ord are None, the 2-norm of x.ravel will be returned.

X是輸入的array, array的情況必須是以下三種情況之一:

  1. axis未指定,ord指定。此時x必須是一維或二維陣列
  2. axis指定,x任意
  3. axis未指定,ord未指定,此時x任意,返回值為x被展平後的一維向量x.ravel的二範數。
  • ord:{non-zero int, inf, -inf, ‘fro’, ‘nuc’}, optional

Order of the norm (see table under Notes). inf means numpy’s inf object. The default is None.

範數的階數,可以不指定。預設為None。inf代表無窮大,-inf為無窮小。
可選的階數見下圖:

ord

  • axis:{None, int, 2-tuple of ints},optional

If axis is an integer, it specifies the axis of x along which to compute the vector norms. If axis is a 2-tuple, it specifies the axes that hold 2-D matrices, and the matrix norms of these matrices are computed. If axis is None then either a vector norm (when x is 1-D) or a matrix norm (when x is 2-D) is returned. The default is None.

如果axis是整數,指定了一個維度,在該維度上按照向量進行範數計算。如果是一個二元整陣列,指定了兩個維度,在指定的這兩個維度上可以構成矩陣。對這些矩陣進行計算。如果沒有指定axis,那麼對於一維輸入返回其向量形式的範數計算值,對於二維輸入返回其矩陣形式的範數。預設值為None

  • keepdims: bool, optional

If this is set to True, the axes which are normed over are left in the result as dimensions with size one. With this option the result will broadcast correctly against the original x.

如果keepdims=True,被指定計算範數的維度將在返回結果中保留,其size為1。計算結果會在該維度上進行broadcast

各範數詳析

NOTE: 對於ord<1的各個範數,結果在嚴格意義不等於數學意義上的範數。但在數值計算層面仍然有效。
ord

預設情況

當不指定ord時,即ord = None,對於矩陣,計算其Frobenius norm,對於向量,計算其2-norm

Frobenius範數

ord = 'fro'
其公式為:
Frobenius範數

F範數只對矩陣存在。其值為對所有元素的絕對值的平方求和後開平方。

Nuclear範數(核範數)

ord = 'nuc'
只對矩陣存在,矩陣的核範數等於其所有奇異值的和。

無窮大範數

對於矩陣:max(sum(abs(x), axis=1)) ,每一行最終得到一個數,返回最大的數。
對於向量:max(abs(x)

無窮小范數

對於矩陣: min(sum(abs(x),axis=1)),每一行得到一個數,返回最小的數。
對於向量: min(abs(x))

0 範數

對於矩陣:不存在
對於向量:sum(x!=0) 所有非零元素的和

1 範數

對於矩陣:max(sum(abs(x)),axis=0,每一列得到一個數,返回最大值。
對於向量:sum(abs(x)**ord)**(1./ord)

-1 範數

對於矩陣:min(sum(abs(x)),axis=0,每一列得到一個數,返回最小值。
對於向量:sum(abs(x)**ord)**(1./ord)

2 範數

對於矩陣:最大的奇異值
對於向量:sum(abs(x)**ord)**(1./ord)

-2範數

對於矩陣:最小的奇異值
對於向量:sum(abs(x)**ord)**(1./ord)

其餘int值對應的範數

對於矩陣: Undefined
對於向量:sum(abs(x)**ord)**(1./ord)