标签: linear-algebra

计算矩阵的零空间

我正在尝试解决一组形式为Ax = 0的方程式.A是已知的6x6矩阵,我使用SVD编写了下面的代码,以获得在某种程度上起作用的向量x.答案大致正确,但不足以对我有用,我怎样才能提高计算的精确度?降低低于1.e-4的eps会导致功能失败.

from numpy.linalg import *
from numpy import *

A = matrix([[0.624010149127497 ,0.020915658603923 ,0.838082638087629 ,62.0778180312547 ,-0.336 ,0],
[0.669649399820597 ,0.344105317421833 ,0.0543868015800246 ,49.0194290212841 ,-0.267 ,0],
[0.473153758252885 ,0.366893577716959 ,0.924972565581684 ,186.071352614705 ,-1 ,0],
[0.0759305208803158 ,0.356365401030535 ,0.126682113674883 ,175.292109352674 ,0 ,-5.201],
[0.91160934274653 ,0.32447818779582 ,0.741382053883291 ,0.11536775372698 ,0 ,-0.034],
[0.480860406786873 ,0.903499596111067 ,0.542581424762866 ,32.782593418975 ,0 ,-1]])

def null(A, eps=1e-3):
  u,s,vh = svd(A,full_matrices=1,compute_uv=1)
  null_space = compress(s <= eps, vh, axis=0)
  return null_space.T

NS = null(A)
print "Null space equals ",NS,"\n"
print dot(A,NS)
Run Code Online (Sandbox Code Playgroud)

python math linear-algebra svd least-squares

12
推荐指数
2
解决办法
6419
查看次数

将线性代数库与Boost :: Units组合在一起

我正在进行大量的科学编程,并使用Boost.Units提供了非常好的经验,它提供了数量的编译时尺寸分析(即带有单位的标签数量,从而通过经典物理尺寸分析捕获了许多误差)并使用了Eigen 2代表线性代数.

然而,Eigen没有单位的概念,虽然你可以在Eigen的矩阵中设置标量,但是它期望两个量的乘法产生相同的类型,这对于单位来说显然是不正确的.例如,代码如:

using boost::units::quantity;
namespace si = boost::units::si;
Eigen::Matrix< quantity< si::length >, 2, 1 > meter_vector;
quantity< si::area > norm = meter_vector.squaredNorm();
Run Code Online (Sandbox Code Playgroud)

不起作用,即使它在逻辑上是正确的.

有没有支持单位的矩阵库?我知道这在过去很难实现,而且C++ 11 decltype会更容易实现,但是C++ 03和模板专业化肯定是可能的.

c++ boost linear-algebra eigen boost-units

12
推荐指数
1
解决办法
1251
查看次数

使用CUDA计算数百个小矩阵的特征值/特征向量

我有一个关于使用CUDA对数百个小矩阵进行特征分解的问题.

我需要同时计算数百(例如500)小(64乘64)实对称矩阵的特征值和特征向量.我试图通过Jacobi方法使用国际象棋锦标赛订购来实现它(有关更多信息,请参阅本文(PDF)).

在该算法中,在每个块中定义了32个线程,而每个块处理一个小矩阵,并且32个线程一起工作以使32个非对角线元素膨胀直到收敛.但是,我对它的表现并不十分满意.

我想知道我的问题哪里有更好的算法,即许多64乘64实对称矩阵的特征分解.我想家庭主人的方法可能是更好的选择,但不确定它是否可以在CUDA中有效实施.网上没有很多有用的信息,因为大多数其他程序员更感兴趣的是使用CUDA/OpenCL来分解一个大矩阵而不是很多小矩阵.

cuda matrix linear-algebra opencl numerical-methods

12
推荐指数
1
解决办法
3452
查看次数

将捕获的坐标转换为屏幕坐标

我认为这可能是一个简单的数学问题,但我不知道现在发生了什么.

我在网络摄像头上捕捉"标记"的位置,我有一个标记及其坐标列表.四个标记是工作表面的外角,第五个(绿色)标记是小部件.像这样:

替代文字http://i37.tinypic.com/308cjtv.jpg

这是一些示例数据:

  • 左上标记(a = 98,b = 86)
  • 右上标记(c = 119,d = 416)
  • 左下标记(e = 583,f = 80)
  • 右下标记(g = 569,h = 409)
  • 小部件标记(x = 452,y = 318)

我想以某种方式将网络摄像头的小部件位置转换为坐标以显示在屏幕上,其中左上角是0,0而不是98,86并且以某种方式考虑了网络摄像头捕获的扭曲角度.

我甚至会从哪里开始?任何帮助赞赏

math image-processing linear-algebra computer-vision

11
推荐指数
2
解决办法
3763
查看次数

减排行梯形式

R中是否有一个产生reduced row echelon form矩阵的函数?这个参考文献说没有.你同意吗?

r matrix linear-algebra

11
推荐指数
3
解决办法
2万
查看次数

Java/Scala中类似Scipy的功能?

我正在尝试将一些Python代码移植到Scala.它大量使用Numpy和Scipy.虽然我发现了许多密集矩阵/线性代数库,它们可以作为NumPy的一个适当的(但不是极好的)替代品,但我还没有找到任何提供我在SciPy中使用的功能的东西.特别是,我正在寻找支持稀疏部分特征分解的库(比如SciPy包装的arpack),然后是SciPy提供的一些简单事物的库(例如直方图).

java scala numpy linear-algebra scipy

11
推荐指数
1
解决办法
7143
查看次数

在下面的例子中,为什么Eigen比ublas慢5倍?

在Eigen版本中,我使用"真正的"固定大小矩阵和向量,更好的算法(LDLT与uBlas的LU),它在内部使用SIMD指令.那么,为什么它在下面的例子中比uBlas慢?

我确信,我做错了 - Eigen 必须更快,或至少可比.

#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/lu.hpp>
#include <boost/numeric/ublas/symmetric.hpp>
#include <boost/progress.hpp>
#include <Eigen/Dense>
#include <iostream>

using namespace boost;
using namespace std;
const int n=9;
const int total=100000;

void test_ublas()
{
    using namespace boost::numeric::ublas;
    cout << "Boost.ublas ";
    double r=1.0;
    {
        boost::progress_timer t;
        for(int j=0;j!=total;++j)
        {
            //symmetric_matrix< double,lower,row_major,bounded_array<double,(1+n)*n/2> > A(n,n);
            matrix<double,row_major,bounded_array<double,n*n> > A(n,n);
            permutation_matrix< unsigned char,bounded_array<unsigned char,n> > P(n);
            bounded_vector<double,n> v;
            for(int i=0;i!=n;++i)
                for(int k=0;k!=n;++k)
                    A(i,k)=0.0;
            for(int i=0;i!=n;++i)
            {
                A(i,i)=1.0+i;
                v[i]=i;
            }
            lu_factorize(A,P);
            lu_substitute(A,P,v);
            r+=inner_prod(v,v);
        } …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm linear-algebra ublas eigen

11
推荐指数
2
解决办法
4449
查看次数

如何在Eigen中近似比较向量?

在Eigen中是否存在使用相对和绝对容差(numpy.allclose)比较矢量(矩阵)的函数?如果其中一个向量非常接近零,则标准isApprox失败.

c++ linear-algebra eigen

11
推荐指数
2
解决办法
9482
查看次数

在Python/NumPy中计算Jordan正常的矩阵形式

在MATLAB中,您可以使用该函数计算矩阵的Jordan正规形式jordan.

它有NumPy和SciPy中的等效功能吗?

python numpy matrix linear-algebra scipy

11
推荐指数
1
解决办法
6741
查看次数

计算Vandermonde矩阵的有效方法

我正在计算Vandermonde matrix一个相当大的1D阵列.这样做的自然而干净的方法就是使用np.vander().但是,我发现这是约.比基于列表推导的方法慢2.5倍.

In [43]: x = np.arange(5000)
In [44]: N = 4

In [45]: %timeit np.vander(x, N, increasing=True)
155 µs ± 205 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

# one of the listed approaches from the documentation
In [46]: %timeit np.flip(np.column_stack([x**(N-1-i) for i in range(N)]), axis=1)
65.3 µs ± 235 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

In [47]: np.all(np.vander(x, N, …
Run Code Online (Sandbox Code Playgroud)

python arrays performance numpy linear-algebra

11
推荐指数
2
解决办法
2198
查看次数