ND4j调用linspace报cannot find symbol错误如何解决
问题根因
报错和依赖配置无关,是API调用的语法错误:
linspace是Nd4j类提供的静态方法,不是内部类,你写的new Nd4j.linspace(0, 1, 100);属于语法误用:Java中new关键字仅用于实例化类对象,不能用来直接调用静态方法,编译器会把Nd4j.linspace识别为类名去查找,自然抛出找不到符号的错误。- 你使用的1.0.0-M2版本
linspace方法需要额外传入数据类型参数,和numpy默认调用的参数列表不完全一致。
正确写法
实现和Python中x = np.linspace(0, 1, 100)完全等价的代码如下:
import org.nd4j.linalg.api.ndarray.INDArray; import org.nd4j.linalg.api.buffer.DataType; import org.nd4j.linalg.factory.Nd4j; public class Demo { public static void main(String[] args) { // 生成[0,1]区间内100个等距数值的一维数组,DOUBLE类型对应numpy默认的float64 INDArray x = Nd4j.linspace(0, 1, 100, DataType.DOUBLE); System.out.println(x); } }
注意事项
- 调用Nd4j的静态方法不需要加
new关键字,直接用Nd4j.方法名(参数)的格式调用即可。 - 如果运行时提示缺少后端,可在pom.xml中补充和
nd4j-api同版本的CPU后端依赖:
<dependency> <groupId>org.nd4j</groupId> <artifactId>nd4j-native-platform</artifactId> <version>1.0.0-M2</version> </dependency>
- 如果需要单精度浮点数组,把
DataType.DOUBLE替换为DataType.FLOAT即可。
内容的提问来源于stack exchange,提问作者Zézouille
相关产品推荐
相关产品推荐

