我在爪哇很新。我希望使用Nd4j库INDArray x = new Nd4j.linspace(0, 1, 100);启动一个数组,在Python中执行类似x = np.linspace(0, 1, 100)的操作。我遇到了一个错误
java:找不到符号
符号:类行空间位置:类
org.nd4j.linalg.factory.Nd4j
虽然我的Nd4j安装得很好,但在pom.xml中添加了以下内容,而且我的IDE IntelliJ可以检测ND4j类。
<dependency>
<groupId>org.nd4j</groupId>
<artifactId>nd4j-api</artifactId>
<version>1.0.0-M2</version>
</dependency>我有遗漏或误解什么吗?谢谢你的帮助
发布于 2022-07-13 07:02:48
问题是:
INDArray x = new Nd4j.linspace(0, 1, 100);由于使用new,Java尝试创建一个名为Nd4j.linspace的类,该类不存在(如“无法找到符号,符号:类链接空间”所示)。类Nd4j确实有一个方法 linspace。要解决这个问题,请删除new,以便调用该方法:
INDArray x = Nd4j.linspace(0, 1, 100);发布于 2022-07-13 06:03:17
编辑:抱歉。感谢下面的评论。乍一看,当IDE只显示部分错误时,该错误看起来就像是标准错误。当您缺少后端时,这种情况非常常见。
在编译错误的上下文中,确保仍然有后端。您不需要直接依赖nd4j-api。它将作为一种过渡性的依赖而被牵扯进来,并且不会在没有后端的情况下工作。
对于IDE,只需确保声明了正确的依赖项(请参见下面的答案),然后刷新maven上下文以确保IDE具有正确的信息。还要确保您给IDE时间来下载正确的依赖项。
注意,对于IDE,它可能仍然不同步,所以您也可以在命令行上独立测试它。当你这样做的时候,你可以跑:
mvn clean install -DskipTests如果您的项目编译,那么您的IDE就是问题所在。这可能意味着您需要重新启动它或使IDE的缓存失效。
关于正确的依赖关系:
您需要的不仅仅是api。你得选个后端。后端允许您根据用例使用cpu或gpu。
请注意,nd4j-api只是访问特定实现(例如:后端)提供的低级功能的层。
大多数情况下,这将是nd4j本机平台。这将允许您使用cpu后端。
具体而言,这将是:
<dependency>
<groupId>org.nd4j</groupId>
<artifactId>nd4j-native-platform</artifactId>
<version>1.0.0-M2</version>
</dependency>请注意,当您指定nd4j本机平台时,它将提供您所需的一切,但下载需要一点时间。
这个工件预声明了nd4j支持的每个操作系统的一组依赖项。在运行maven时,可以通过添加一个JVM属性来防止这种情况:
mvn -Djavacpp.platform="$YOUR_PLATFORM" clean package您还应该能够在pom的属性中预先指定以下内容:
<properties>
<javacpp.platform>$YOUR_PLATFORM</javacpp.platform>
</properties>$YOUR_PLATFORM通常可以是: linux-x86_64,windows-x86_64,macosx-x86_64 -这些都是maven分类器。您可以在这里看到特定版本的综合列表:https://repo1.maven.org/maven2/org/nd4j/nd4j-native/1.0.0-M2/
请注意,1.0.0-M2是当前版本,但可能会更改,因此,如果希望为特定平台提供版本,请始终指定最新版本。
https://stackoverflow.com/questions/72961432
复制相似问题