问题标签 [mtj]
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.
java - 在 Matrix Toolkit Java 中构造矩阵
关于Matrix Toolkit Java (MTJ),我有一个非常幼稚的问题:如何Matrix B
从double[][] A
?
因为在库中,Matrix
只是一个接口而不是一个类。
编辑
所以,我认为拥有JAMA
和'MTJ'会解决问题,因为JAMA
可以直接定义Matrix
对象,但它没有奏效。
我的代码是这样的:
导入 java.util.Arrays;进口贾马。; 导入 no.uib.cipr.matrix。;
s
但它被解决为JAMA Matrix concept and MTJ's
Matrix`定义之间的明显冲突。
我该如何解决这个问题?
java - 使用 MTJ/Netlib(本机)的缓慢矩阵乘法性能
我需要将大小为 5000x5000 的大矩阵乘以 20000x20000。我在查找具有稀疏矩阵但可以进行快速乘法的库时遇到问题。
首先,我已经阅读了上一个关于 Java 矩阵库性能的问题(Java 矩阵数学库的性能?)。基于那里的最佳答案,我决定使用 JBLAS,因为它是最快的之一。就我而言,乘以 5000x5000 矩阵大约需要 50 秒左右,这比 Matlab 慢很多,但仍然可以忍受。
问题是矩阵可能非常大(最多 20k x 20k 或更多),但它们通常很稀疏。矩阵中只有 30% 的元素是非零的。JBLAS 不提供任何稀疏矩阵实现,因此存储大型密集矩阵所需的内存占用可能会非常高。我尝试切换到 MTJ/Netlib,因为它应该是基准测试中具有稀疏矩阵的更好的库之一。这里的注释(https://github.com/fommil/netlib-java/)说要获得最佳性能,我必须在我的机器上编译一个原生 BLAS。所以我下载了 OpenBLAS,编译并安装了它。我还运行了一些命令来在 Ubuntu 13.10 上设置 OpenBLAS 库:
我在最后一个更新替代步骤中选择了我编译的 OpenBLAS 库。我假设在此之后,Netlib 拿起我编译的 OpenBLAS 库并使用它。我还从http://r.research.att.com/benchmarks/R-benchmark-25.R运行了一些基准测试,并观察到之前(使用来自 ubuntu 的默认 blas)和之后的情况(使用我的编译 OpenBLAS)。
但是,MTJ 中的矩阵-矩阵乘法性能仍然很慢。例如,我有两个矩阵 A = 5824x5824,W = 5824x4782。我在Java中像这样将它们相乘
代码已经运行了超过 45 分钟,足以输入整篇文章,但仍未完成。使用 JBLAS,相同的矩阵乘法只需不到 1 分钟。有什么我错过的吗?
谢谢 !
java - 我在使用 MTJ 时是否使用 BLAS/LAPACK 库?
我不确定这是问我问题的正确地方,所以如果不是,我道歉。
我正在编写一个执行大量稀疏矩阵乘法的 Java 程序。经过一些研究,我发现Matrix Toolkits Java提供了一些最佳性能,但仅在使用BLAS/LAPACK fortran 库的netlib-java包装器时。
现在我尝试按照这些 github 页面上的说明进行操作,并且我已经从 Arch Linux 存储库安装了 BLAS 和 LAPACK:
检查 /usr/lib/ 时,它确实包含
和
现在,我的程序将一个包含大约 450,000x450,000 个元素的稀疏矩阵与一个向量相乘。这大约需要一秒钟。我在 Intel Core 2 Duo @ 2.53GHz 上运行。
毕竟我的问题是,我真的在使用 Fortran 后端,还是这些函数的 Java 实现?我意识到我的计算量很大,但我仍然觉得它们可以更快......有没有办法检查运行时使用了哪些库?
提前致谢!问候,
莱纳斯
编辑:
我刚刚尝试了一些东西,这对我来说表明我实际上并没有使用这些库。我已经重命名了 liblapack 和 libblas,假设这会使 Java 无法找到它们。我的程序在重命名库后仍然运行,更重要的是,花了同样长的时间......我想我现在正在寻找的是如何确保库已加载并被使用!
java - 如何在 MTJ 中将行向量与矩阵相乘?
我想将一个行向量V
与一个矩阵相乘M
得到一个向量V'
,即
我怎么能用 MTJ 做到这一点?该接口Vector
似乎没有multiply
方法。
java - Matrix Toolkits Java 和 Netlib-Java 的文档在哪里?
我开始为 Java 安装一些快速矩阵和 BLAS 库,并根据Java Matrix Benchmark的结果选择了 MTJ(由 netlib-java 支持)。我相信我已经通过 Maven 安装了所有东西,但是我找不到这些库的任何可靠文档。
合乎逻辑的起点是 github 页面:
...但是除了 Github 上极其简洁的 MTJ wiki 部分之外,我找不到任何教程或 javadoc 的链接。Netlib 的源代码似乎在 fortran 中(使用 F2J 作为编译步骤),所以我也无法通过源代码代替 javadoc 直接爬网。
更令人困惑的是,出于某种原因,似乎有某种用于 MTJ 的 Javadoc 由德国大学托管,它引用了似乎不属于 MTJ 库的包(如 nni.BLAS) Maven为我做的。在田纳西大学的某个地方托管了另一个更粗略的 Javadoc,虽然与 netlib-java 项目没有明显的联系,但不知何故有一个 Javadoc 页面似乎解释了 netlib-java 的 DGEMV 实现使用的三个额外整数参数(偏移量某种形式?)。如果我查看DGEMV的 netlib-java 发行版中的 fortran 文档,它具有我期望从 DGEMV 获得的 11 个标准参数。
所以这是我的问题:
1.) 是否有 MTJ/netlib 的官方文档?如果有,在哪里?
2.) 如果没有官方文档,是否还有其他资源可以让某人学习使用这个库?如果这个项目不是由开发人员专门使用,那么人们正在学习以某种方式使用它。如何?
3.) 如果 Netlib 的 11 参数 DGEMV 的 Java 版本没有通过 Maven 作为 MTJ 的一部分安装,那么我硬盘上的这个 14 参数是什么?
谢谢。
gradle - Gradle 尝试解压缩 pom 类型的依赖项
在我的一个项目中,我依赖于一个 java 矩阵库 MTJ,我在下面这样指定build.gradle
:
MTJ 反过来依赖于 netlib,更具体地说,它相当于在'com.github.fommil.netlib:all:1.1.2'
上面显式添加 compile。
当我运行 gradle 构建。我收到以下错误:
因此,当它只是一个指向其他依赖项的 pom 时,不知何故 gradle 会感到困惑并将文件视为 zip 文件。
任何人都有修复或知道解决方法?
java - 将 MTJ 矩阵打印为 CSV 或其他文本格式的方法?
上下文:我需要将 MTJ 矩阵导出到 Python。似乎导出到 CSV,然后从 Python 重新导入 te CSV 是最好的。
如何将 MTJ 矩阵导出为 CSV?我错过了图书馆的方法吗?或者除了手工之外还有其他方法吗?
java - 使矩阵变大
我将 MatrixToolkitsJava 用于我的论文的神经网络项目,在其中我需要使权重矩阵更大,然后可能更小。我现在这样做的方式是创建一个新矩阵并在实例化新值的同时复制现有值,这种方式效率极低,占用了绝大多数时间。是否有一种有效的方法可以将行和列添加到现有矩阵?
java - Weka 3.8.1 无法链接到mtj.jar,导致java.lang.ClassNotFoundException: no.uib.cipr.matrix.Matrix
我正在处理 weka 中的一些数据,我想使用 weka API 以便我可以使用我的自定义算法。但是,当我只想实例化LinearRegression
该类时:LinearRegression myRegression = new LinearRegression()
我遇到了与以下相同的错误:这个人遇到了同样的问题,他回滚到版本 3.6.12我检查了我的weka.jar
,我可以找到mtj.jar
包含在内,所以我确定必须被不恰当地链接到某个地方。降级 API 版本对我来说不是最佳选择,因为我想使用 new class RegressionAnalysis
。任何帮助谢谢。
eigenvalue - 在 Java 中计算稀疏矩阵的复特征向量
我正在尝试计算一个可能很大且稀疏的非对称NxN
矩阵的特征值和特征向量(N
> 10 ^ 6)的特征值和特征向量。我不需要所有这些,但也许是第一个。理想情况下,我想从 Java 中这样做,但如果需要,可以迁移到 C、C++ 或 Python。
我的矩阵可能同时具有复杂的特征值和特征向量。例如,查看此 Wolfram Alpha 样本的结果的结果。
我找到了几种方法来使用一些 Java 库并为它们编写了一些评估代码:
但我面临的问题是这些库不返回(或者至少我没有办法得到)复值特征向量。它们中的大多数确实返回复值特征值,但不返回复特征向量。它们通常以具有列作为每个特征向量的“实数向量”或“实数矩阵”的形式提供后者。
事实上,我确实需要复杂形式的特征值,如果有的话。
现在,我最近开始研究似乎支持我的用例的Spectra (C++)。但是我想先问一下,也许会抛弃我这边的一个误解,或者我可能从 Java 领域跳过的东西,因为我想尽可能地继续使用单一平台/语言。
有什么我应该调查的吗?另外,如果我最终放弃了 Java 来完成这项任务,我可以寻找其他 Spectra 的替代品吗?谢谢!