标签: lapack

LAPACK SVD(奇异值分解)

你知道任何使用LAPACK的例子来计算SVD吗?

linear-algebra svd lapack

6
推荐指数
1
解决办法
1万
查看次数

针对 openblas 的链接;我还需要Lapack吗?

我使用以下链接使用 openblas 编译 Ipopt:./configure --with-blas-incdir="-L/home/moritz/build/CoinIpopt_test/ThirdParty/openblas/include/" --with-blas-lib="-L/home/moritz/build/CoinIpopt_test/ThirdParty/openblas/lib/ -libopenblas_sandybridgep-r0.2.14.a"

如果我没有定义任何特定的 LAPACK 库,Ipopt 会自动使用 netlib 中的 LAPACK。openplas 是否有自己优化的 LAPACK 实现?

如果我使用--with-lapack-incdir="-L/home/moritz/build/CoinIpopt_test/ThirdParty/openblas/include/" --with-lapack-lib="-L/home/moritz/build/CoinIpopt_test/ThirdParty/openblas/lib/"

make 失败,因为无法解析某些 Lapack 例程,例如undefined reference todpotrs_ At least there is the filelapacke.h in theinclude folder but there are not LAPACK libraries in thelib` 文件夹。

我在 GitHub 上发现了这个问题:

好的,我想我想通了...您可以通过在 make 命令行上指定 NO_LAPACK=1 来构建 OpenBLAS,而不包含 LAPACK。默认情况下,它包含完整的 LAPACK 库(某些部分已优化)。

但如果是这种情况,库在哪里?

我应该针对 openblas 编译 LAPACK 吗?

如果有人能够阐明这个问题,我将不胜感激。

blas lapack ipopt openblas

5
推荐指数
1
解决办法
6825
查看次数

LAPACKE 加速框架

我正在用 C++ 开发一个基于线性代数的工具,允许用户链接到不同操作系统上的 OpenBLAS/ATLAS/Intel MKL。这在 Windows 和 Linux 上都很好,但我更愿意允许 OS X 用户也链接到 Accelerate Framework。但是,我的代码使用LAPACKE,它是 LAPACK 的 C 接口(例如,函数是 LAPACKE_fxname ),它似乎不是 Accelerate Framework 的一部分。相反,它具有 CLAPACK f2c'd 函数(例如函数是 fxname_),它们具有不同的接口并使用列主存储。

由于我的其余代码适用于行优先,因此我不想将矩阵转换为列优先,以便我可以在 OS X 上使用 CLAPACK,但这是我唯一的选择吗?也就是说,用LAPACKE开发跨平台软件时,有没有办法使用Accelerate Framework呢?或者有什么技巧可以用来在行主数组上使用 CLAPACK 函数(也许只是传递“转置”标志来进行“不转置”操作?在我看来,行主矩阵以相同的方式存储作为转置的列顺序矩阵。)?

c++ lapack accelerate-framework

5
推荐指数
0
解决办法
805
查看次数

Hadamard 产品的最快代码

有两个维度为 2 的复杂数组,我想计算一个逐点乘法(Hadamard 乘积):

complex(8) :: A(N,N), B(N,N), C(N,N)
...
do j = 1, N
  do i = 1, N
    C(i,j) = A(i,j)*B(i,j)
  enddo
enddo
Run Code Online (Sandbox Code Playgroud)

是否有任何 BLAS 例程来优化它,或者这实际上已经是编写 Hadamard 产品的最有效方法?或者在这种简单的情况下,编译器是否为我完成了这项工作?

我用 Fortran 编码,所以第一个索引是快速索引。

optimization blas lapack matrix-multiplication

5
推荐指数
0
解决办法
1446
查看次数

求解约束线性方程组

我有一个y = Ax + b形式的方程组,其中y,xb是n×1向量,A是×n(对称)矩阵.

所以这里是皱纹.并非所有的x都是未知的.指定了某些x行,并且y的相应行未知.以下是一个例子

| 10  |   |  5  -2  1 | | * |   | -1 |
|  *  | = | -2   2  0 | | 1 | + |  1 |
|  1  |   |  1   0  1 | | * |   |  2 |
Run Code Online (Sandbox Code Playgroud)

其中,*指定未知数.

我已经为Fortran中的上述问题构建了一个求解器,但是我想知道是否有一个不错的鲁棒求解器作为Lapack或MLK的一部分用于这些类型的问题?


我的求解器基于一个排序矩阵,称为根据已知和未知pivot = [1,3,2]重新排列x …

fortran matrix linear-algebra lapack fortran95

5
推荐指数
1
解决办法
3281
查看次数

将 Intel MKL 中的 LAPACK 与 gfortran 链接

我在将 lapack 链接到 fortran 示例程序时遇到问题。这是程序示例.f95

Program LinearEquations
! solving the matrix equation A*x=b using LAPACK
Implicit none

! declarations
double precision :: A(3,3), b(3)
integer :: i, pivot(3), ok

! matrix A
A(1,:)=(/3, 1, 3/)
A(2,:)=(/1, 5, 9/)
A(3,:)=(/2, 6, 5/)

! vector b
b(:)=(/-1, 3, -3/)
!b(:)=(/2, 2, 9/)

! find the solution using the LAPACK routine DGESV
call DGESV(3, 1, A, 3, pivot, b, 3, ok)

! print the solution x
do i=1, 3
  write(*,9) i, b(i)
end …
Run Code Online (Sandbox Code Playgroud)

linux fortran lapack intel-mkl

5
推荐指数
1
解决办法
4776
查看次数

Blas 和 Lapack 库是否有本机 C++(非 C)接口?

目前,有:

  • cblasblas一起提供,
  • lapacke与lapack一起发货,

然而,这些是 C 接口。

显然,您可以在 C++ 代码中使用它们,但您无法获得这些接口是为 C++ 设计的所有好处。所以我的问题是: 原生 C++ 中是否存在这样的接口?

c++ blas lapack

5
推荐指数
1
解决办法
1816
查看次数

R 是否在启动时创建了太多线程

每次调用 R 都会创建 63 个子进程

Rscript --vanilla  -e 'Sys.sleep(5)' &  pstree -p $! | grep -c '{R}'
# 63
Run Code Online (Sandbox Code Playgroud)

哪里pstree看起来像这样

R(2562809)???{R}(2562818)                                                                                                                                                     
           ??{R}(2562819)
           ...
           ??{R}(2562878)
           ??{R}(2562879)
           ??{R}(2562880)
Run Code Online (Sandbox Code Playgroud)

这是预期的行为吗?

这是一台带有 debian 9.3、R 3.4.3、blas 3.7.0 和 openmp 2.0.2 的 72 核机器

dpkg-query -l '*blas*' 'r-base' '*lapack*' '*openmp*'|grep ^ii
ii  libblas-common     3.7.0-2                    amd64        Dependency package for all BLAS implementations
ii  libblas-dev        3.7.0-2                    amd64        Basic Linear Algebra Subroutines 3, static library
ii  libblas3           3.7.0-2                    amd64        Basic Linear Algebra Reference implementations, shared library
ii …
Run Code Online (Sandbox Code Playgroud)

parallel-processing r blas lapack

5
推荐指数
1
解决办法
886
查看次数

使用 python 求解 7000x7000 线性系统时的最佳性能方法

I\xe2\x80\x99m 需要一种有效的方法来反转 python 中的 7000x7000 空气动力学影响系数(密集)矩阵。在使用 FORTRAN 例程之前,我已经开始使用 LAPACK 中的 LU 分解例程来处理问题,我已经看到它在其他相关应用程序中的使用非常有效。不过,我读到 NumPy 和 SciPy 线性系统求解器大多基于对 C 中相同 LAPACK/BLAS 函数的直接调用,并且想知道切换到 FORTRAN 是否真的会在一定程度上减少计算时间这证明放弃一种更简单、更高级的语言是合理的。

\n\n

如果有 Python 求解器可以保证该大小(1000 到 10000,平方)的矩阵具有相似的性能,那么它们是哪些?

\n\n

我确实需要矩阵逆,所以切换到迭代 Ax=b 解决方案不是一个选择。

\n

python matrix-inverse lapack

5
推荐指数
1
解决办法
1744
查看次数

python中参数化的厄米矩阵的特征系统

假设我们对依赖于参数 t 的厄密矩阵 h(t) 的特征值和特征向量感兴趣。我的矩阵又大又稀疏,因此需要进行数值处理。

一种简单的方法是在离散化参数值 t_k 处评估矩阵 h(t_k)。是否可以根据“特征向量的特征”对特征向量和特征值进行排序?

让我用下面的简单例子来说明我所说的“特征向量的特征”是什么意思(i 表示虚数单位)。

h(t) = {{1, i t}, {-i t, 1}}

特征值为 1-t 和 1+t,具有相应的特征向量 {-i, 1} 和 {i, 1}。因此,根据“特征向量特征”进行排序,特征值应该在 t = 0 处交叉。然而,大多数特征求解器通过增加特征值来对它们进行排序,将特征向量从负交换为正 t(参见代码和输出图)。

import numpy as np
import scipy.sparse.linalg as sla
import matplotlib.pyplot as plt

def h(t):
    # parametrized hermitian matrix
    return np.array([[1, t*1j], [-t*1j, 1]])


def eigenvalues(t):
    # convert to tuple for np.vectorize to work
    return tuple(sla.eigsh(h(t), k=2, return_eigenvectors=False))

eigenvalues = np.vectorize(eigenvalues)

t = np.linspace(-1, 1, num=200) …
Run Code Online (Sandbox Code Playgroud)

python scipy eigenvalue sparse-matrix lapack

5
推荐指数
0
解决办法
190
查看次数