规范化数组中包含的向量
Normalizing vectors contained in an array
我有一个名为 X 的数组,其中每个元素本身都是一个二维向量。这个数组的对角线只填充了零向量。
现在我需要标准化这个数组中的每个向量,而不改变它的结构。
首先我尝试计算每个向量的范数并将其放入一个名为 N 的数组中。之后我想将 X 的每个元素除以 N 的每个元素。
我遇到了两个问题:
1) N的很多项都是零,当我试图除以它们时,这显然是一个问题。
2) 数组的形状不匹配,因此 np.divide() 无法按预期工作。
除此之外,我不认为像这样计算 N 是个好主意,因为稍后我希望能够对两个以上的向量执行相同的操作。
import numpy as np
# Example array
X = np.array([[[0, 0], [1, -1]], [[-1, 1], [0, 0]]])
# Array containing the norms
N = np.vstack((np.linalg.norm(X[0], axis=1), np.linalg.norm(X[1],
axis=1)))
R = np.divide(X, N)
我希望输出如下所示:
R = np.array([[[0, 0], [0.70710678, -0.70710678]], [[-0.70710678, 0.70710678], [0, 0]]])
您不需要使用 sklearn
。只需定义一个函数,然后使用列表理解:
假设 X 的第 0 维等于您拥有的二维数组的数量,请使用:
import numpy as np
# Example array
X = np.array([[[0, 0], [1, -1]], [[-1, 1], [0, 0]]])
def stdmtx(X):
X= X - X.mean(axis =1)[:, np.newaxis]
X= X / X.std(axis= 1, ddof=1)[:, np.newaxis]
return np.nan_to_num(X)
R = np.array([stdmtx(X[i,:,:]) for i in range(X.shape[0])])
想要的输出R
:
array([[[ 0. , 0. ],
[ 0.70710678, -0.70710678]],
[[-0.70710678, 0.70710678],
[ 0. , 0. ]]])
我有一个名为 X 的数组,其中每个元素本身都是一个二维向量。这个数组的对角线只填充了零向量。 现在我需要标准化这个数组中的每个向量,而不改变它的结构。
首先我尝试计算每个向量的范数并将其放入一个名为 N 的数组中。之后我想将 X 的每个元素除以 N 的每个元素。 我遇到了两个问题:
1) N的很多项都是零,当我试图除以它们时,这显然是一个问题。
2) 数组的形状不匹配,因此 np.divide() 无法按预期工作。
除此之外,我不认为像这样计算 N 是个好主意,因为稍后我希望能够对两个以上的向量执行相同的操作。
import numpy as np
# Example array
X = np.array([[[0, 0], [1, -1]], [[-1, 1], [0, 0]]])
# Array containing the norms
N = np.vstack((np.linalg.norm(X[0], axis=1), np.linalg.norm(X[1],
axis=1)))
R = np.divide(X, N)
我希望输出如下所示:
R = np.array([[[0, 0], [0.70710678, -0.70710678]], [[-0.70710678, 0.70710678], [0, 0]]])
您不需要使用 sklearn
。只需定义一个函数,然后使用列表理解:
假设 X 的第 0 维等于您拥有的二维数组的数量,请使用:
import numpy as np
# Example array
X = np.array([[[0, 0], [1, -1]], [[-1, 1], [0, 0]]])
def stdmtx(X):
X= X - X.mean(axis =1)[:, np.newaxis]
X= X / X.std(axis= 1, ddof=1)[:, np.newaxis]
return np.nan_to_num(X)
R = np.array([stdmtx(X[i,:,:]) for i in range(X.shape[0])])
想要的输出R
:
array([[[ 0. , 0. ],
[ 0.70710678, -0.70710678]],
[[-0.70710678, 0.70710678],
[ 0. , 0. ]]])