美文网首页
ND4J/加法与乘法

ND4J/加法与乘法

作者: hello风一样的男子 | 来源:发表于2019-04-03 10:10 被阅读0次
package org.nd4j.examples;

import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.api.ops.impl.transforms.Sin;
import org.nd4j.linalg.factory.Nd4j;
import org.nd4j.linalg.ops.transforms.Transforms;

import java.util.Arrays;

/**
 * --- Nd4j示例 4:使用INDArrays的附加操作---
 * 
 *  在这个例子中,我们将看到处理INDArray的方法
 * 
 * @author Alex Black
 */
public class Nd4jEx4_Ops {

    public static void main(String[] args){

        /*
        ND4J定义了很多的操作,现在我们来看看如何使用它们中的一些:
        - 元素级别操作:   add, multiply, divide, subtract, 等 add, mul, div, sub,
            INDArray.add(INDArray), INDArray.mul(INDArray), etc
        - 矩阵操作:mmul
        - 行/列向量操作:addRowVector, mulColumnVector, 等
        - 元素级别转换, 如tanh, 标量max操作, 等等
         */

        //首先让我们来看看就地操作与拷贝操作对比
        //考虑一下调用:   myArray.add(1.0)对比myArray.addi(1.0)
        //例如, "add" 对比. "addi"   -> "i" 表示应地操作 
        //在实践中:就地操作修改原始数组;其他操作(“拷贝操作”)进行拷贝
        
        
        INDArray originalArray = Nd4j.linspace(1,15,15).reshape('c',3,5);      
        INDArray copyAdd = originalArray.add(1.0);
        System.out.println("由add返回的对象:    " + (originalArray == copyAdd));
        System.out.println("在originalArray.add(1.0)执行之后的原始数组:\n" + originalArray);
        System.out.println("拷贝添加的数组:\n" + copyAdd);

        
        
        //让我们对就地添加操作执行相同的操作:
        INDArray inPlaceAdd = originalArray.addi(1.0);
        System.out.println();
        //addi 返回同一个JABA对象 
        System.out.println("由addi返回的对象:    " + (originalArray == inPlaceAdd));   
        System.out.println("originalArray.addi(1.0)操作后返回的原始数组:\n" + originalArray);
        System.out.println("就地添加的数组:\n" + copyAdd);


      
        //让我们为下一节重新创建原始数组,并创建另一个数组:
        originalArray = Nd4j.linspace(1,15,15).reshape('c',3,5);
        //参见示例2;我们有一个3x5,具有统一的随机(0到1)值
        INDArray random = Nd4j.rand(3,5);               



       
        //我们可以执行元素操作。请注意,数组形状必须在此处匹配
        //对于标量add与addi的工作方式与完全相同
        INDArray added = originalArray.add(random);
        System.out.println("\n\n\n 随机值:\n" + random);
        System.out.println("原始加上随机值:\n" + added);


        //矩阵操作很容易:
        INDArray first = Nd4j.rand(3,4);
        INDArray second = Nd4j.rand(4,5);
        INDArray mmul = first.mmul(second);
        
        //期望的3x5 输出
        System.out.println("\n\n\n  mmul数组的形状为: " + Arrays.toString(mmul.shape()));    


     
        //我们可以按行(“每行”)和按列(“每列”)操作
        //同样,inplace与copy操作的工作方式相同(即addRowVector与addiRowVector)
        INDArray row = Nd4j.linspace(0,4,5);
        System.out.println("\n\n\n 行:\n" + row);
        INDArray mulRowVector = originalArray.mulRowVector(row);
        //对于“originalArray”中的每一行,使用行向量执行逐元素乘法
        System.out.println("originalArray.mulRowVector(row)的结果");
        System.out.println(mulRowVector);


        //元素方向的转换类似于“tanh”和标量max值。这些可以通过几种方式应用:
        System.out.println("\n\n\n");
       
        //同样,请注意打印精度有限,如示例2所示。
        System.out.println("随机数组:\n" + random);     
        System.out.println("元素在随机数组上的tanh转换:\n" + Transforms.tanh(random));
        System.out.println("元素在随机数组上的乘方转换 (x^3.0) :\n" + Transforms.pow(random,3.0));
        System.out.println("元素与标量max操作 (与标量0.5):\n" + Transforms.max(random,0.5));
       
        //我们也可以更详细地执行此操作:
        INDArray sinx = Nd4j.getExecutioner().execAndReturn(new Sin(random.dup()));
        System.out.println("元素sin(x)操作:\n" + sinx);
    }
}

运行结果

由add返回的对象:    false
在originalArray.add(1.0)执行之后的原始数组:
[[    1.0000,    2.0000,    3.0000,    4.0000,    5.0000], 
 [    6.0000,    7.0000,    8.0000,    9.0000,   10.0000], 
 [   11.0000,   12.0000,   13.0000,   14.0000,   15.0000]]
拷贝添加的数组:
[[    2.0000,    3.0000,    4.0000,    5.0000,    6.0000], 
 [    7.0000,    8.0000,    9.0000,   10.0000,   11.0000], 
 [   12.0000,   13.0000,   14.0000,   15.0000,   16.0000]]

由addi返回的对象:    true
originalArray.addi(1.0)操作后返回的原始数组:
[[    2.0000,    3.0000,    4.0000,    5.0000,    6.0000], 
 [    7.0000,    8.0000,    9.0000,   10.0000,   11.0000], 
 [   12.0000,   13.0000,   14.0000,   15.0000,   16.0000]]
就地添加的数组:
[[    2.0000,    3.0000,    4.0000,    5.0000,    6.0000], 
 [    7.0000,    8.0000,    9.0000,   10.0000,   11.0000], 
 [   12.0000,   13.0000,   14.0000,   15.0000,   16.0000]]



 随机值:
[[    0.0183,    0.7362,    0.4703,    0.9437,    0.5912], 
 [    0.1248,    0.1432,    0.6722,    0.0705,    0.3339], 
 [    0.1951,    0.8349,    0.8127,    0.2331,    0.3958]]
原始加上随机值:
[[    1.0183,    2.7362,    3.4703,    4.9437,    5.5912], 
 [    6.1248,    7.1432,    8.6722,    9.0705,   10.3339], 
 [   11.1951,   12.8349,   13.8127,   14.2331,   15.3958]]



  mmul数组的形状为: [3, 5]



 行:
[[         0,    1.0000,    2.0000,    3.0000,    4.0000]]
originalArray.mulRowVector(row)的结果
[[         0,    2.0000,    6.0000,   12.0000,   20.0000], 
 [         0,    7.0000,   16.0000,   27.0000,   40.0000], 
 [         0,   12.0000,   26.0000,   42.0000,   60.0000]]




随机数组:
[[    0.0183,    0.7362,    0.4703,    0.9437,    0.5912], 
 [    0.1248,    0.1432,    0.6722,    0.0705,    0.3339], 
 [    0.1951,    0.8349,    0.8127,    0.2331,    0.3958]]
元素在随机数组上的tanh转换:
[[    0.0183,    0.6268,    0.4384,    0.7369,    0.5307], 
 [    0.1241,    0.1423,    0.5864,    0.0704,    0.3220], 
 [    0.1926,    0.6831,    0.6711,    0.2289,    0.3763]]
元素在随机数组上的乘方转换 (x^3.0) :
[[ 6.1052e-6,    0.3990,    0.1040,    0.8403,    0.2066], 
 [    0.0019,    0.0029,    0.3038,    0.0004,    0.0372], 
 [    0.0074,    0.5821,    0.5368,    0.0127,    0.0620]]
元素与标量max操作 (与标量0.5):
[[    0.5000,    0.7362,    0.5000,    0.9437,    0.5912], 
 [    0.5000,    0.5000,    0.6722,    0.5000,    0.5000], 
 [    0.5000,    0.8349,    0.8127,    0.5000,    0.5000]]
元素sin(x)操作:
[[    0.0183,    0.6715,    0.4531,    0.8097,    0.5573], 
 [    0.1245,    0.1427,    0.6227,    0.0705,    0.3277], 
 [    0.1938,    0.7413,    0.7262,    0.2309,    0.3855]]

翻译:风一样的男子

image

相关文章

  • ND4J/加法与乘法

    运行结果 翻译:风一样的男子

  • DL4J中文文档/ND4J/基本用法

    介绍 线性代数的基本运算是矩阵的生成、加法和乘法。本指南将向你展示如何使用ND4J以及各种高级转换执行这些操作。 ...

  • 乘法先于加法?

    我们在学与教时都强调:乘法是求连续几个相同加数的和;乘法是加法的简便运算,虽没有说加法在前,乘法在后,但大家...

  • 组合数学

    ## 加法原则与乘法原则 P17 gggg ff

  • 《运算律》教学反思

    运算律包括加法交换律、加法结合律、乘法交换律、乘法结合律、乘法分配律。这些运算律在数与运算中起这重要的作用。通过回...

  • 大数乘法与加法

    1、大数乘法 (1)转换并反转,字符串转换为数字并将字序反转; (2)自动移位,逐位相乘,添加最后的进位; (3)...

  • [Combinatorial] 2 小乒乓球的组合之旅

    2 小乒乓球的组合之旅 2-1 加减乘除来计数 计数的基本法则1.1 加法法则与乘法法则加法法则: 分类乘法法则:...

  • 第三章作业

    无符号的整数加法、乘法是mod2^32的加法、乘法; 证明: #include "stdafx.h" #inclu...

  • 【工作】《分物游戏》(6)

    第三单元《数一数与乘法》的前测(A班46人、B班52人) 只会加法:20+23人 加法和乘法都会:26+29人 第...

  • 工厂方法模式

    父类 加法类 减法类 乘法类 除法类 工厂接口 加法工厂 减法工厂 乘法工厂 除法工厂 使用 输出

网友评论

      本文标题:ND4J/加法与乘法

      本文链接:https://www.haomeiwen.com/subject/gnhabqtx.html