【问题标题】:ND4J set values using boolean indexing and computationND4J 使用布尔索引和计算设置值
【发布时间】:2022-02-03 19:03:58
【问题描述】:

我想根据索引并使用计算在数组中设置值。在 numpy 中,我会写以下内容:

array[array < 0] = 2 * array[array < 0]

ND4J 也能实现这样的效果吗?

编辑:以及更复杂的语句/索引,例如:

array[array2 < 0] = 2 * array3[array2 < 0]

(假设array1、array2和array3的维度匹配)

【问题讨论】:

    标签: java nd4j


    【解决方案1】:

    条件赋值是最接近的:

    import org.nd4j.linalg.indexing.BooleanIndexing;
    import org.nd4j.linalg.indexing.conditions.Conditions;
    
    
    INDArray array1 = Nd4j.create(new double[] {1, 2, 3, 4, 5, 6, 7});
    INDArray array2 = Nd4j.create(new double[] {7, 6, 5, 4, 3, 2, 1});
    INDArray comp = Nd4j.create(new double[] {1, 2, 3, 4, 3, 2, 1});
    BooleanIndexing.replaceWhere(array1, array2, Conditions.greaterThan(4));
    

    您可以在其中使用很多条件和东西。我建议使用第二个数组并在整个数组上应用您想要的算法,并让 BooleanIndexing 替换您想要从传入的第二个数组中选择元素的内容。

    【讨论】:

    • 谢谢!所以如果我理解正确,那么就没有办法对整个数组执行计算了吗?
    • 您可以自己在 for 循环中手动应用 lambda。它以类似掩码的格式工作,但从确切的销售中选择元素。 Numpy 的 doex 是一个间接的 lambda。我们的底层软件应用在 c++ 级别,而不是衣衫褴褛的风格(例如:1 关闭索引)如果您愿意,欢迎您提出问题:github.com/eclipse/deeplearning4j/issues,我们可以看一个脸的方式来做到这一点。
    猜你喜欢
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 2021-12-12
    • 2017-07-14
    • 2018-09-13
    相关资源
    最近更新 更多