我使用DJL作为Java中Numpy的包装库来执行矩阵上的复杂操作,并且在执行NDArray#any()调用时遇到了问题。
我正在从一系列操作创建一个矩阵,然后我想测试它是否包含任何true值。
引起此问题的代码片段如下所示:
NDArray orthogonallyAccessibleMaskMax = columns.get(index).eq(maxs.get(index))
.logicalAnd(infiniteSurfaceMask.neg()).logicalAnd(
deltaNormalsPositions.dot(loopArgumentsMatrixMax.get(index)).gt(RADIUS_TOLERANCE))
.toType(DataType.FLOAT32, true);
if (orthogonallyAccessibleMaskMax.any().getBoolean()) {
infiniteSurfaceMask.add(orthogonallyAccessibleMaskMax);
}例外是:
ai.djl.engine.EngineException: MXNet engine call failed: MXNetError: Unknown type enum 7
Stack trace:
File "C:\Users\Administrator\kimbergz\b4\src\operator\numpy\../tensor/elemwise_unary_op.h", line 252
at ai.djl.mxnet.jna.JnaUtils.checkCall(JnaUtils.java:1930)
at ai.djl.mxnet.jna.JnaUtils.waitToRead(JnaUtils.java:473)
at ai.djl.mxnet.engine.MxNDArray.close(MxNDArray.java:1629)
at ai.djl.mxnet.engine.MxNDArray.sum(MxNDArray.java:996)
at ai.djl.ndarray.NDArray.any(NDArray.java:4299)
at com.package.calculateInfiniteSurfaceMask(DeltaThicknessStep.java:137)奇怪的是,如果我调试代码并一步一步地执行,操作就会正确地执行,并得到我正在寻找的布尔值。但是,如果我让代码在没有断点的情况下运行,,在orthogonallyAccessibleMaskMax上执行的每个操作都会抛出这个异常。
发布于 2022-04-22 16:32:42
这是由于MXNet中对布尔类型的支持有限。您可以在Python中复制相同的问题:
from mxnet import nd
array = nd.zeros(1, dtype='bool')
nd.negative(array)您可以尝试使用PyTorch引擎而不是MXNet引擎。
https://stackoverflow.com/questions/69824818
复制相似问题