ND4j INDArray 值索引和布尔运算

这是numpy代码:

import numpy as np

arr1 = np.array([[0,1,np.nan],[3,np.nan,5],[np.nan,7,8]])
arr2 = np.array([[np.nan,6],[5,3],[2,np.nan]])

print(arr1)
print(arr2)

arr1 是: [[0.1.南] [ 3. 南 5.] [南 7. 8.]]

arr2 是: [[南 7. 6.] [ 5. 南 3.] [ 2. 1. nan]]

然后我做:

idx1 = np.isnan(arr1)
idx2 = np.isnan(arr2)

idx = idx1 | idx2

arr1[idx] = -1
arr2[idx] = -1

print(arr1)
print(arr2)

arr1 变为: [[-1。 1.-1.] [ 3. -1。 5.] [-1。 7. -1.]]

arr2 变为: [[-1。 7.-1。] [ 5. -1。 3.] [-1。 1. -1.]]

然后我想使用带有 ND4j 的 Scala 重写此代码:

import org.nd4j.linalg.factory.Nd4j

val arr1 = Nd4j.create(Array(Array(0,Double.NaN),Array(3,Double.NaN,5),Array(Double.NaN,8)))
val arr2 = Nd4j.create(Array(Array(Double.NaN,6),Array(5,3),Array(2,Double.NaN)))

println(arr1)
println(arr2)

val idx1 = arr1.isnaN
val idx2 = arr2.isnaN

val idx = idx1 | idx2 // error

arr1.putWhereWithMask(idx,-1)
arr2.putWhereWithMask(idx,-1)

println(arr1)
println(arr2)

此代码未编译。如何修改它?谢谢!

anothermimi 回答:ND4j INDArray 值索引和布尔运算

您可以为此使用 BooleanIndexing 类: https://github.com/eclipse/deeplearning4j/blob/master/nd4j/nd4j-backends/nd4j-api-parent/nd4j-api/src/main/java/org/nd4j/linalg/indexing/BooleanIndexing.java

以下是使用 nan 的测试示例:

 INDArray array = Nd4j.create(new double[] {0,1,2,3,Double.NaN,5,6,7,8,9});
int val = (int) Nd4j.getExecutioner().exec(new MatchCondition(array,Conditions.isNan()))
                .getDouble(0);

,

经过多次搜索和尝试,我找到了一个解决方案:

import org.nd4j.linalg.factory.Nd4j

val arr1 = Nd4j.create(Array(Array(0,Double.NaN),Array(3,5),Array(Double.NaN,8)))
val arr2 = Nd4j.create(Array(Array(Double.NaN,6),Array(5,3),Array(2,Double.NaN)))

println(arr1)
println(arr2)

val idx1 = arr1.isNaN
val idx2 = arr2.isNaN

val idx = Nd4j.createUninitialized(DataType.BOOL,idx1.shape():_*)

Nd4j.exec(new Or(idx1,idx2,idx))

val minusOnes = Nd4j.zerosLike(arr1).subi(1.0)

val arr1_modified = Nd4j.where(idx,arr1,minusOnes)(0)
val arr2_modified = Nd4j.where(idx,arr2,minusOnes)(0)

println(arr1_modified)
println(arr2_modified)

其他解决方案表示赞赏。谢谢!

本文链接:https://www.f2er.com/300062.html

大家都在问