C语言中良好的矩阵反演程序
作为数值计算的Python代码的一部分,我必须多次逆转大量(稀疏)矩阵(稀疏)矩阵(〜100x100).我真的很想加快该程序的速度,而我建议的一种方式是呼吁C中的c subroutine进行矩阵反转步骤. 此任务是否有建议的有效且经过良好测试的C例程? 谢谢. 解决方案 >>> from numpy import * >>> from numpy.linalg import inv >>> from scipy.sparse import csr_matrix >>> m = matrix([[3,1,5],[1,0,8],[2,1,4]]) >>> s = csr_matrix(m) >>> invs = inv(a) # Inverse sparse matrix >>> dot(a,inva) # Check the result, should be eye(3) within machine precision csr_matrix([[ 1.0000000
14 2024-04-09
编程技术问答社区
用C语言中的lapack计算矩阵的逆值
我希望能够使用lapack计算C/C ++中的一般NxN矩阵的倒数. 我的理解是,在拉帕克中进行反转的方法是使用dgetri函数,但是,我无法弄清楚其所有参数应该是什么. 这是我拥有的代码: void dgetri_(int* N, double* A, int* lda, int* IPIV, double* WORK, int* lwork, int* INFO); int main(){ double M [9] = { 1,2,3, 4,5,6, 7,8,9 }; return 0; } 使用dgetri _? ,如何完成它以获得3x3矩阵M的倒数 解决方案 首先,m必须是二维数组,例如double M[3][3].从数学上讲,您的数组是一个1x9向量,这是不可逆转的. n是指向int的指针 矩阵的顺序 - 在这种情况下, n = 3. a是指向lu的指针 矩阵的
8 2024-04-06
编程技术问答社区
Spark和ScalaNLP库Breeze可以一起使用吗?
我正在为Apache Spark开发基于Scala的极限学习机.我的模型必须是火花估计器,并使用火花框架以适合机器学习管道.有人知道是否可以与Spark一起使用微风?我所有的数据都是在火花数据框架中,可以想象我可以使用Breeze导入它,使用微风密度向量作为数据结构,然后将其转换为估算器部件的数据帧.微风的优点是,它对于摩尔 - 纯伪倒入具有函数pinv,这是非平方矩阵的倒数.据我所知,Spark mllib中没有等效功能.我不知道是否可以将微风张量转换为引发数据框架,因此,如果有人有经验,那真的很有用.谢谢! 解决方案 微风可与火花一起使用.实际上,内部用于许多MLLIB函数,但所需的转换并未以public暴露.您可以添加自己的转换并使用微风来处理单个记录. 例如Vectors您可以找到转换代码: Vector.fromBreeze For Matrices please see asBreeze/fromBreeze in 矩阵 但是,它不能在分布
4 2024-02-29
编程技术问答社区
如何计算希尔密码算法中的反密钥矩阵?
我发现很难理解基质的倒数的方式.我了解了这一切都在Modulo算术中完成的,但是某种程度上并没有加起来.我真的很喜欢一个简单的解释! 考虑以下山丘密钥矩阵: 5 8 17 3 请使用上面的矩阵进行插图. 解决方案 您必须研究属于Number Theory, in order to understand the maths behind modulo arithmetic . 例如,矩阵k的倒数为(1/det(k)) * appaint(k),其中det(k)0. 我假设您不明白如何计算 1/det(k) 在Modulo算术中,这是线性一致性和GCD来播放的地方. 您的K具有DET(K)= -121.假设Modulo M是26.我们想要 x *(-121)= 1(mod 26). [a = b(mod m)意味着a-b = n *m] 我们可以很容易地发现,对于 x = 3 上述一致性是正确的,因为26个划分(3*(-121)-1)正好
22 2024-01-23
编程技术问答社区
最快的矩阵求逆方法
我想处理具有反函数和很多功能的图像.对于代码迅速运行 double cvInvert(const CvArr* src, CvArr* dst, int method=CV_LU) 选择最佳枢轴元素的CV_LU高斯消除 CV_SVD单数值分解(SVD)方法 CV_SVD_SYM SVD方法用于对称阳性定义的矩阵. 解决方案 在OpenCv2.x中,有一个称为Mat::inv(int method)的新接口来计算矩阵的倒数.请参阅参考.. c ++:matexpr mat :: inv(int method = decomp_lu)const 参数: 方法 - Matrix inversion method. Possible values are the following: DECOMP_LU is the LU decomposition. The matrix must be non-singular. DE
12 2024-01-23
编程技术问答社区
如何有效地计算diag(X %*% solve(A) %*% t(X)),而不采取矩阵逆运算?
我需要以下对角线: diag(X %*% solve(A) %*% t(X)) 其中A是一个完整的等级方形矩阵,X是矩形矩阵. A和X均稀疏. 我知道发现矩阵的倒数是不好的,除非您真的需要它.但是,我看不到如何重写公式,以使solve(A)用solve替换为两个参数,从而使线性系统求解而无需明确反转.这可能吗? 解决方案 也许在我真正开始之前,我需要提到,如果您做 diag(X %*% solve(A, t(X))) 矩阵反向避免. solve(A, B)执行LU分解,并使用所得的三角矩阵因子求解线性系统A x = B.如果您离开B未指定,则默认为对角线矩阵,因此您将明确计算A的矩阵矩阵. . 您应该仔细阅读?solve,并可能很多次提示.它说它基于LAPACK例行,您可以在场景后面找到数值线性代数. DGESV computes the solution to a real system of linear equations A *
24 2024-01-23
编程技术问答社区
检查矩阵是否为奇异的快速方法?(不可逆,det = 0)
最快的算法是什么(c或c ++示例很酷的链接)以检查一个小方形矩阵( 解决方案 最佳方法是计算条件编号通过SVD和检查是否是大于1/epsilon,其中epsilon是机器的精度. 如果您允许虚假负面因素(即矩阵有缺陷,但是您的算法可能无法检测到它),则可以使用Wikipedia文章中的Max(a_ii)/min(a_ii)/min(a_ii)公式作为条件编号的代理,但是您必须先计算QR分解(该公式适用于三角形矩阵):A = QR带有r orthoconal,然后cond(a)= cond(q).还有一些技术可以通过O(n)操作计算Q的条件数,但是有更复杂的技术. 其他解决方案 我同意高斯消除. http://math.nist.gov/javanumerics/jama/jama/doc/jama/ludecomposition.html 文档lu分解 - 从矩阵构造lu分解后,您可以在其上调用一种方法以获取确定性.我的猜测是,至少值得将其与任何更专业的方案进行比较.
28 2024-01-22
编程技术问答社区
在Matlab中是否有快速反转矩阵的方法?
我需要在MATLAB中倒入很多大型(约5000 x 5000)矩阵.我实际上需要倒数,所以我不能使用mldivide,这仅在一个b. 我的矩阵来自一个问题,这意味着它们具有一些不错的特性.首先,他们的决定因素是1,所以它们绝对可逆.不过,它们不是对角线化的,否则我会尝试将它们对角线,倒转,然后将它们放回原处.他们的条目都是实数(实际上是理性的). 我正在使用MATLAB来获取这些矩阵,对于它们,我需要使用它们的对逆,因此我更喜欢一种加快Matlab的方法.但是,如果我可以使用另一种语言会更快,请告诉我.我不知道很多其他语言(除了c和java之外,只有一点),因此,如果它在其他语言中确实很复杂,那么我可能无法使用它.但是,请继续建议,以防万一. 解决方案 我实际上需要倒数,所以我不能使用mldivide,... 这是不正确的,因为您仍然可以使用mldivide进行倒数.请注意,A-1 = A-1 * I.在MATLAB中,这相当于 invA = A\spey
26 2024-01-22
编程技术问答社区
矩阵的Python反演
如何获得Python中矩阵的倒数?我自己实施了,但这是纯粹的python,我怀疑那里有更快的模块可以做. 解决方案 您应该看看from numpy import matrix from numpy import linalg A = matrix( [[1,2,3],[11,12,13],[21,22,23]]) # Creates a matrix. x = matrix( [[1],[2],[3]] ) # Creates a matrix (like a column vector). y = matrix( [[1,2,3]] ) # Creates a matrix (like a row vector). print A.T # Transpose of A. print A*x # Matrix multiplication of A and x. print A.I # Inverse of A. print linalg.solve(A, x) # Solve
22 2024-01-22
编程技术问答社区
对4x4矩阵进行反转
我正在寻找有关如何反转4x4矩阵的示例代码实现.我知道有高斯的省略,lu分解等,但是没有详细查看它们,而是在寻找代码来执行此操作. 语言理想的是C ++,数据可在16个浮子的阵列中以列订单提供. 解决方案 在这里: bool gluInvertMatrix(const double m[16], double invOut[16]) { double inv[16], det; int i; inv[0] = m[5] * m[10] * m[15] - m[5] * m[11] * m[14] - m[9] * m[6] * m[15] + m[9] * m[7] * m[14] + m[13] * m[6] * m[11] - m[13] * m[7] * m[10]; inv
82 2024-01-22
编程技术问答社区
如何使用投影矩阵从图像中计算出真实世界坐标系中的射线?
给定n张图像和每个图像的投影矩阵,如何计算由图像的每个像素发出的光线(线),这与现实世界坐标系统的三个平面之一相交?相机捕获的对象处于相同的位置,每个图像的摄像头位置都不同.这就是为什么每个图像都有一个单独的投影矩阵. 据我的研究表明,这是3D到2D投影的倒数.由于投影到2D时丢失了信息,因此只能计算现实世界坐标系中的光线(线),这很好. 根据k*[r t] ,基于给定的k,r和t分量计算的一个示例投影矩阵p 3310.400000 0.000000 316.730000 K= 0.000000 3325.500000 200.550000 0.000000 0.000000 1.000000 -0.14396457836077139000 0.96965263281337499000 0.19760617153779569000 R= -0.90366580603479685000 -0.04743335255026152200 -0.42
6 2024-01-08
编程技术问答社区
Matlab的反操作和警告
不太确定这意味着什么. "警告:矩阵对工作精度是单数." 我有一个3x4矩阵,称为矩阵bestm 矩阵Q是BestM的3x3,Matrix M是Bestm 的最后一列 我想做q *矩阵m的c = -inverse矩阵 我明白了 c = [inf inf]这是不对的,因为我正在为世界上的摄像机中心计算 bestM = [-0.0031 -0.0002 0.0005 0.9788; -0.0003 -0.0006 0.0028 0.2047; -0.0000 -0.0000 0.0000 0.0013]; Q = bestM(1:3,1:3); m = bestM(:,4); X = inv(Q); C = -X*m; disp(C); 解决方案 可以将一个单数矩阵视为零等效的矩阵,当您尝试反转0时,它会炸毁(转到无穷大),这就是您到达这里的目标.用户1281385使用格式命令提高精度是绝对错误的;格式命令用于更改向您显示的
12 2023-11-27
编程技术问答社区
Three.js: 在场景的角落显示世界坐标轴
我想显示箭头指示摄像机右下角的世界坐标方向(x,y,z),就像在玛雅人中完成的那样,以便在围绕对象旋转相机或穿过场景,您仍然可以识别世界坐标的方向. 我试图使用两种不同的方法来实现这一目标,并且都没有工作. 我有一个带有三个箭头的对象,因为儿童使用THREE.ArrowHelper类,我们暂时将其称为XYZ.第一种方法是使XYZ成为场景的孩子,并提供从相机当前位置计算出的位置,以及相机指向和调整的方向的偏移,以便它在我想要的角落里,而不是在屏幕的中心.我几乎可以使用这种工作,因为在箭头中保持正确的旋转,但是位置有点有趣,我停止走这条路线,因为在移动相机时确实是"抖动"的.我不确定这是表演问题还是其他问题. 第二种方法是使XYZ成为具有局部位置偏移量的相机的孩子,然后逆转相机的旋转,然后将反向旋转施加到XYZ上,以便与世界坐标相匹配.我似乎使用这种方法很接近,但是我可以正确地将位置正确,或者旋转正确,而不是两者兼而有之. 我目前正在使用代码XYZ.matrix.ex
80 2023-10-20
编程技术问答社区
在一个三维theano张量上播放linalg.pinv
在下面的示例中,有一个大小(4、3、3)的3D numpy矩阵+关于如何计算Numpy中4个3*3矩阵中每个矩阵中每个的PINV的解决方案.我还尝试使用在numpy中使用的相同功能,在Theano中希望它能实现相同,但失败了.知道如何在theano中做? dt = np.dtype(np.float32) a=[[[12,3,1], [2,4,1], [2,4,2],], [[12,3,3], [2,4,4], [2,4,5],], [[12,3,6], [2,4,5], [2,4,4],], [[12,3,3], [2,4,5], [2,4,6]]] a=np.asarray(a,dtype=dt) print(a.shape) apinv=np.zeros((4,3,3)) print(np.linalg.pinv(a[0,:,:]).shape) #numpy solution apinv = map(
26 2023-10-20
编程技术问答社区
在Python中使用statsmodels错误进行逻辑回归
我正在尝试使用StatsModels(我需要摘要)来实现逻辑回归,并且我会收到此错误: LinAlgError: Singular matrix 我的DF是数字且相关的,我删除了非数字和恒定特征. 我试图实施常规回归,并且由于相关功能而进行L1罚款(不可用L2). . 我试图检查矩阵等级并获得此打印: print(len(df.columns)) -> 156 print(np.linalg.matrix_rank(df.values)) -> 151 我怎么知道哪些功能是问题?为什么? 我的代码: logit = sm.Logit(y,X) result = logit.fit_regularized(trim_mode='auto', alpha=0,maxiter=150) print(result.summary()) 更新: 删除高度相关的功能后,我得到了: len(df.columns) = np.linal
18 2023-10-05
编程技术问答社区
如何在scipy中计算稀疏矩阵的广义逆运算
我有一个稀疏的矩阵W,当我使用linalg.pinv(W)时,它会引发一些错误: Traceback (most recent call last): File "/Users/ad9075/PycharmProjects/bednmf/test.py", line 14, in testNmfRun self.factor = factorization(self.V) File "/Users/ad9075/PycharmProjects/bednmf/nmf.py", line 18, in factorization W_trans = linalg.pinv(W) File "/Library/Python/2.7/site-packages/scipy/linalg/basic.py", line 540, in pinv b = np.identity(a.shape[0], dtype=a.dtype) IndexError: t
100 2023-09-08
编程技术问答社区
在Python中进行稀疏矩阵的伪逆运算
我正在使用来自神经影像学的数据,并且由于大量数据,我想为我的代码使用稀疏的矩阵(scipy.sparse.lil_matrix或csr_matrix). . 特别是,我需要计算矩阵的伪内,以解决最小二乘问题. 我找到了方法稀疏.lsqr,但这不是很高效.是否有一种方法来计算摩尔 - 佩罗斯的伪内(正常矩阵的PINV通讯). 我的矩阵A的大小约为600'000x2000,在矩阵的每一行中,我将拥有从0到4个非零值.矩阵A尺寸由Voxel X纤维束(白色物质纤维区域)给出,我们期望在体素中最大4块交叉.在大多数白质体素中,我们预计至少有1道,但我要说的是20%的线可能是零. 向量B不应稀疏,实际上B包含每个体素的度量,这通常不是零. 我需要最大程度地减少错误,但是向量X上也有一些条件.当我尝试使用较小矩阵的模型时,我永远不需要限制系统以满足这些条件(通常为0 有什么帮助吗?有没有办法避免进行伪为? 谢谢 6月1日更新: 再次感谢您的帮助. 我真的无法向
86 2023-09-08
编程技术问答社区
计算非常大的矩阵的倒数
我正在尝试计算C ++中非常大的矩阵(11300x21500)的倒数.到目前为止,我尝试了特征和玛迪略图书馆,但在初始化阶段都失败了,说没有足够的记忆力.可以有任何方法可以克服这种情况吗? 预先感谢 P.S 我应该将矩阵的大小更正为21500x21500.正如Umnyobe所建议的那样,这不是方形矩阵.它实际上是观察矩阵, x ,我正在尝试计算( x t x ) -1 我有一个8GB内存(在64位系统中),但我认为我没有利用所有这些内存空间.任务管理器表明,错误时的内存使用率为1GB.也许Windows7中有一个OS命令,该命令在其内存使用率超过1GB时关闭应用程序. 顺便说一句,我最初的目的是在此观察矩阵上运行回归. 另一件事:观察矩阵X的每一行中的大多数列为零.可以有一种方法来利用这一点,以限制倒置操作中的内存使用量? 解决方案 假设矩阵是 square,您可能正在寻找的是现场矩阵反转算法. 您应该检查 this . 其他解决方案
82 2023-09-08
编程技术问答社区
改善一个条件不好的矩阵
我的矩阵状况良好,他的 rcond() rcond() 接近零,因此,该矩阵的倒数不是正确的.我尝试使用 pinv() ,但这并不能解决问题.这就是我进行反向的方式: X = (A)\(b); 我仰望解决此问题的解决方案,发现此链接((最后解决方案)用于改进矩阵.那里的解决方案建议使用此问题: A_new = A_old + c*eye(size(A_old)); 其中c > 0.到目前为止,采用此技术可以使矩阵A更好地调理,而所得解决方案看起来更好.但是,我使用c的不同值进行了研究,结果解决方案取决于所选c的值. 手动调查c的价值,是否有一种自动方法可以找到我获得最佳解决方案的c的值? 解决方案 在离散逆理论中,将一个小的值c添加到即将倒置的矩阵A的对角线中,称为阻尼反转,而要添加的小值称为Marquardt -Levenberg系数.有时,矩阵A的特征值零或接近零特征值,因此矩阵变为单数.在对角线元件中添加一个小的阻尼系数使其稳定. c的值更大,较大
60 2023-09-08
编程技术问答社区