【发布时间】:2022-10-24 05:53:19
【问题描述】:
我正在使用 ND4J 基础知识来快速了解其线性代数功能。
我正在使用 nd4j-api 和 nd4j-native 依赖项版本 1.0.0-M2.1、Open JDK 版本 17、Kotlin 1.7.20 和 IntelliJ 2022.2.2 Ultimate Edition 的 Macbook Pro 上运行。
我正在编写 JUnit 5 测试来执行简单的操作:加、减、乘和除一个 2x2 矩阵和一个标量;矩阵加法、减法、乘法; LU 和 QR 分解。一切都成功并且通过就好了。
当我为 SVD 运行这个 JUnit 测试时,我遇到了一个问题:
@Test
fun `singular value decomposition`() {
// setup
// https://stackoverflow.com/questions/19763698/solving-non-square-linear-system-with-r/19767525#19767525
val a = Nd4j.create(doubleArrayOf(
0.0, 1.0, -2.0, 3.0,
5.0, -3.0, 1.0, -2.0,
5.0, -2.0, -1.0, 1.0
), intArrayOf(3, 4))
val b = Nd4j.create(doubleArrayOf(-17.0, 28.0, 11.0), intArrayOf(3, 1))
val u = Nd4j.create(doubleArrayOf(
-0.1295469, -0.8061540, 0.5773503,
0.7629233, 0.2908861, 0.5773503,
0.6333764, -0.5152679, -0.5773503
), intArrayOf(3, 3))
val v = Nd4j.create(doubleArrayOf(
0.87191556, -0.2515803, -0.1764323,
-0.46022634, -0.1453716, -0.4694190,
0.04853711, 0.5423235, 0.6394484,
-0.15999723, -0.7883272, 0.5827720
), intArrayOf(3, 4))
val d = Nd4j.create(doubleArrayOf(
8.007081e+00, 4.459446e+00, 4.022656e-16
), intArrayOf(3))
// exercise
val actual = NDLinalg().svd(a, true, true)
// assert
// Temporary assertion; I'll replace this after I see what SVD returns to me.
Assertions.assertTrue(true)
}
我很惊讶地看到这个错误:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
org.nd4j.linalg.exception.ND4JIllegalStateException: Op name svd - no output arrays were provided and calculateOutputShape failed to execute
at org.nd4j.linalg.cpu.nativecpu.ops.NativeOpExecutioner.exec(NativeOpExecutioner.java:1513)
at org.nd4j.linalg.factory.Nd4j.exec(Nd4j.java:6545)
at org.nd4j.linalg.factory.ops.NDLinalg.svd(NDLinalg.java:309)
at ie.duffymo.fea.MatrixTest.singular value decomposition(MatrixTest.kt:353)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
More in the stack trace.
Process finished with exit code 255
我不知道如何解决我没有提供输出数组的警告。我已经提供了方法签名所要求的内容。
关于如何解决这个问题的任何建议?
我所指的示例解决方案是使用 R for another SO question 创建的。
【问题讨论】: