问题标签 [hmatrix]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
windows - 在 Windows 10 上通过 MSYS2 安装 hmatrix 时遇到问题
我一直在尝试在我的(64 位)Windows 10 计算机上安装 hmatrix;在搜索并尝试了许多可能的解决方案(包括此处给出的“Windows”和“Alternative Windows Build”下的说明)之后,我决定继续在这个Reddit 线程上给出的操作过程。
但是,当我输入命令时
进入 MSYS2 shell,给出以下日志:
但是,当我检查目录时c:\msys64\mingw64\bin
,我发现libopenblas.dll
它就在那里;我不知道为什么阴谋集团似乎找不到它。
关于为什么这不起作用或该怎么做的任何见解?
更新:
文件libopenblas.dll.a
和libopenblas.a
在目录中c:\msys64\mingw64\lib
。是否有可能我也需要以某种方式包含这个目录?(如果我这样做,我会怎么做?)
我还下载了下面 Alex Vorobiev 评论中的文件,c:\msys64\mingw64\bin
如果它们是 .dll 或c:\msys64\mingw64\lib
它们是 .libs,则将它们放入。头文件已经包含在c:\msys64\include\openblas
.
在进行这些更改后,我尝试了原始帖子中命令的几种变体,包括切换\bin
和\lib
切换\include
,\include\openblas
但所有这些仍然给出相同的错误。
haskell - 当我在左侧放置双矩阵并在右侧放置双精度时,为什么 (-) 无法进行类型检查?
由于 hmatrix 为 Matrix 类型提供了 Num 的实例,我可以表达元素减法,例如:
这很好用,就像3
a一样Num
,并且通过从 的每个元素中减去 3 来创建一个矩阵m
。
为什么这也不起作用:
我得到的错误是:
我希望编译器能够理解 aDouble
也是Num
. 为什么看起来不是这样?
haskell - 等效于 NumPy 的 argsort 的高效 Haskell
是否有等效于 NumPyargsort
函数的标准 Haskell?
我正在使用HMatrix,因此,想要一个与之兼容的函数,Vector R
它是Data.Vector.Storable.Vector Double
. 下面的argSort
函数是我目前正在使用的实现:
我使用显式限定import
的 s 只是为了清楚每种类型和函数的来源。
这种实现并不是非常有效,因为它将输入向量转换为列表,并将结果转换回向量。这样的东西(但更有效)是否存在于某处?
更新
@leftaroundabout 有一个很好的解决方案。这是我最终得到的解决方案:
这更直接可用,Numeric.LinearAlgebra
因为数据向量是 a Storable
。这对索引使用未装箱的向量。
haskell - 岭回归需要多少空间?
在 Haskell 中,岭回归可以表示为:
但是,此操作非常耗费内存。这是一个简约的示例,它需要我的机器上超过 2GB 的空间,并且需要 3 分钟才能执行。
$ cabal exec ghc -- -O2 Test.hs
$ time ./Test
./Test 190.16s user 5.22s system 106% cpu 3:03.93 total
问题是增加常数n,至少到 n = 4000,而 RAM 受到 5GB 的限制。理论上矩阵求逆运算需要的最小空间是多少?这种操作如何在空间方面进行优化?岭回归可以用更便宜的方法有效地替代吗?
multithreading - 并行调用 HMatrix(或一般的 FFI)
我正在使用 repa 库(3 和 4)在 haskell 中处理点云。至少我正在努力。
在并行性确实有很大帮助的情况下,我需要大量执行一些操作。其中大多数是对点的(度量)邻域的简单线性代数运算。例如,我需要在每行都是一个点的小矩阵上计算 SVD 的主成分分析。
现在我使用线性包作为向量类型
以及用于点云的这些向量的一维数组
所以现在我遇到了使用computeP并行调用hmatrix矩阵分解的函数的问题。我为此尝试了 hmatrix 本身以及 repa -linear-algebra包。我遇到的问题是,对于所有这些调用(无论我如何提供数据,无论我调用什么(svd、特征分解、qr decomp 等)),应用程序总是会因总线错误或段错误而随机崩溃。
我也没有找到任何方法来获得至少可以为我指明正确方向的任何堆栈跟踪。堆栈跟踪通常在 pthread 结束。
此外,我编写了自己的 C 代码,我称之为:
这在具有 20 个并行内核的大型点云上运行良好。从未以任何方式坠毁。
现在我非常模糊的想法是 hmatrix 用“安全”调用 C/Fortran 代码,从而允许 pthread 分叉并且实际上不是线程安全的。我无法尝试验证这个假设,因为调试对于 haskell 工具链来说似乎是一个陌生的概念(至少对于我这样一个完整的新手来说)。
总之,我有三个问题:
- 是否已知 hmatrix 存在并行工作的问题
- 有没有人致力于这些基本算法的本地实现?
- 如何防止 FFI 包装的代码在无法访问导入调用的情况下生成 fork() 的线程?
- 如何调试 hmatrix 之类的东西?
第二个是我特别感兴趣的,因为我发现 hmatrix 非常丑陋(subhask 看起来很有希望,但太不完整以至于不可行)。我的目标是改用haskell,但如果我必须使用我自己的C++代码来处理上述任何琐碎的事情,我可以像现在一样继续用C++编码......
haskell - 使用 hmatrix 应用逐元素数学函数(带矢量化)
我需要以一种有效的方式在 Haskell 中的向量元素上应用一个函数,这意味着我不是在寻找这样的东西:
更具体地说,是否有exp, log, ... etc
使用 Haskell 在 hmatrix 中进行元素向量操作,类似于使用 Python 在 numpy 中的对应物?如果我不使用矢量处理功能,我的代码运行非常缓慢。
haskell - haskell中hmatrix Vector类型的模式匹配
这个问题听起来微不足道,但我真的找不到任何可以帮助我解决问题的方法。这是一个在 Haskell 上重现它的简单示例:
当我加载它时它会抱怨
它认为 v 是 Double 而它应该是 Vector Double,我怎样才能在模式匹配中强制它是这样的?
请:我需要匹配参数,而不仅仅是分配给 lambda 函数。
haskell - 无法导入 Data.Packed.Matrix
这是我的 package.yaml:
我的进口:
我想导入 Data.Packed.Matrix 以使用 @@> 访问器,GHC 抱怨:Could not find module `Data.Packed.Matrix'
我用谷歌搜索没有成功,可能我一定犯了一个愚蠢的错误。Data.Packed.Matrix 在 hmatrix 包中被引用,一个简单的导入就足够了。