我遇到的问题是我需要强制执行n个3x3矩阵的等级2,我不想为它使用循环。 所以我创建了所有矩阵的SVD,并将对角矩阵的最小元素设置为0。
import numpy as np
from numpy import linalg as la
[u, s, vT] = la.svd(A)
s[:,2] = 0
所以,当我只有一个矩阵时,我会做以下事情:
sD = np.diag(s) # no idea how to solve this for n matrices
Ar2 = u.dot(sD).dot(vT) # doing the dot products as two dot products
# using np.einsum for n matrices
好的,所以我有问题从(n,3)数组构建我的对角矩阵。我尝试在一些重塑之后使用np.diag,但我不认为这个函数可以处理s-array的两个维度。循环可能是一种解决方案,但速度太慢。那么,使用给定信息分别计算两个点积的最简洁,最快捷的方法是将s-matrices构建成对角线形式?
# dimensions of arrays:
# A -> (n,3,3)
# u -> (n,3,3)
# s -> (n,3)
# vT -> (n,3,3)