DeepLearning4j实战1--ND4J矩阵操作

本文示例源码地址:

https://github.com/tianlanlandelan/DL4JTest/blob/master/src/test/java/com/dl4j/demo/Nd4jTest.java

## maven安装DL4J

pom文件引入:

<dependency>

            <groupId>org.nd4j</groupId>

            <artifactId>nd4j-native</artifactId>

            <version>1.0.0-beta3</version>

        </dependency>

        <dependency>

            <groupId>org.deeplearning4j</groupId>

            <artifactId>deeplearning4j-core</artifactId>

            <version>1.0.0-beta3</version>

        </dependency>

## 创建矩阵

//生成一个全0二维矩阵

        INDArray tensorA =  Nd4j.zeros(4,5);

        println("全0二维矩阵",tensorA);

        //生成一个全1二维矩阵

        INDArray tensorB =  Nd4j.ones(4,5);

        println("全1二维矩阵",tensorB);

        //生成一个全1二维矩阵

        INDArray tensorC =  Nd4j.rand(4,5);

        println("随机二维矩阵",tensorC)

运行结果:

====全0二维矩阵===

[[        0,        0,        0,        0,        0],

[        0,        0,        0,        0,        0],

[        0,        0,        0,        0,        0],

[        0,        0,        0,        0,        0]]

====全1二维矩阵===

[[    1.0000,    1.0000,    1.0000,    1.0000,    1.0000],

[    1.0000,    1.0000,    1.0000,    1.0000,    1.0000],

[    1.0000,    1.0000,    1.0000,    1.0000,    1.0000],

[    1.0000,    1.0000,    1.0000,    1.0000,    1.0000]]

====随机二维矩阵===

[[    0.5017,    0.9461,    0.3255,    0.2155,    0.9273],

[    0.0239,    0.5130,    0.8028,    0.5011,    0.3680],

[    0.3644,    0.0864,    0.0342,    0.4126,    0.5553],

[    0.2027,    0.7989,    0.6696,    0.0402,    0.7059]]

## 矩阵运算--拼接

println("水平拼接若干矩阵,矩阵必须有相同的行数", Nd4j.hstack(tensorA,tensorB));

println("垂直拼接若干矩阵,矩阵必须有相同的列数", Nd4j.vstack(tensorA,tensorB));

运行结果:

====水平拼接若干矩阵,矩阵必须有相同的行数===

[[        0,        0,        0,        0,        0,    1.0000,    1.0000,    1.0000,    1.0000,    1.0000],

[        0,        0,        0,        0,        0,    1.0000,    1.0000,    1.0000,    1.0000,    1.0000],

[        0,        0,        0,        0,        0,    1.0000,    1.0000,    1.0000,    1.0000,    1.0000],

[        0,        0,        0,        0,        0,    1.0000,    1.0000,    1.0000,    1.0000,    1.0000]]

====垂直拼接若干矩阵,矩阵必须有相同的列数===

[[        0,        0,        0,        0,        0],

[        0,        0,        0,        0,        0],

[        0,        0,        0,        0,        0],

[        0,        0,        0,        0,        0],

[    1.0000,    1.0000,    1.0000,    1.0000,    1.0000],

[    1.0000,    1.0000,    1.0000,    1.0000,    1.0000],

[    1.0000,    1.0000,    1.0000,    1.0000,    1.0000],

[    1.0000,    1.0000,    1.0000,    1.0000,    1.0000]]

## 矩阵运算-加减

注意,每个运算函数都有一个加i的函数,如 add和addi,加i的函数运算后会覆盖掉原矩阵

        println("矩阵元素加上一个标量",tensorA.add(10));

        println("矩阵相加",tensorA.add(tensorB));

        println("矩阵元素加上标量后覆盖原矩阵tensorA",tensorA.addi(10));

        println("矩阵相减",tensorA.sub(tensorB));

运行结果:

====矩阵元素加上一个标量===

[[  10.0000,  10.0000,  10.0000],

[  10.0000,  10.0000,  10.0000]]

====矩阵相加===

[[    0.2202,    0.1473,    0.1217],

[    0.8428,    0.6761,    0.8127]]

====矩阵元素加上标量后覆盖原矩阵tensorA===

[[  10.0000,  10.0000,  10.0000],

[  10.0000,  10.0000,  10.0000]]

====矩阵相减===

[[    9.7798,    9.8527,    9.8783],

[    9.1572,    9.3239,    9.1873]]

## 矩阵运算-乘除

println("矩阵对应元素相乘",tensorA.mul(tensorB));

        println("矩阵元素除以一个标量",tensorA.div(2));

        println("矩阵对应元素相除",tensorA.div(tensorB));

        /*

        矩阵A*B=C

        需要注意:

        1、当矩阵A的列数等于矩阵B的行数时,A与B可以相乘。

        2、矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。( A:2,3; B:3,4; C:2,4 )

        3、乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。

        */

        println("矩阵相乘",tensorA.mmul(tensorB));

运算结果:

```bash

====矩阵对应元素相乘===

[[    2.2015,    1.4728,    1.2173],

[    8.4281,    6.7608,    8.1272]]

====矩阵元素除以一个标量===

[[    5.0000,    5.0000,    5.0000],

[    5.0000,    5.0000,    5.0000]]

====矩阵对应元素相除===

[[  45.4231,  67.8989,  82.1506],

[  11.8650,  14.7911,  12.3043]]

====矩阵相乘===

[[    4.8916,  23.3161],

[    4.8916,  23.3161]]

## 矩阵运算-翻转


println("矩阵转置",tensorB.transpose());

println("矩阵转置后替换原矩阵tensorB",tensorB.transposei());

运算结果:

====矩阵转置===

[[    0.2202,    0.8428],

[    0.1473,    0.6761],

[    0.1217,    0.8127]]

====矩阵转置后替换原矩阵tensorB===

[[    0.2202,    0.8428],

[    0.1473,    0.6761],

[    0.1217,    0.8127]]

## 三维矩阵

三维矩阵和二维矩阵操作一样

        //创建一个三维矩阵 2*3*4

        INDArray tensor3d_1 = Nd4j.create(new int[]{2,3,4});

        println("创建空的三维矩阵",tensor3d_1);

        //创建一个随机的三维矩阵 2*3*4

        INDArray tensor3d_2 =  Nd4j.rand(new int[]{2,3,4});

        println("创建随机三维矩阵",tensor3d_2);

        //矩阵的每个元素减去一个标量后覆盖原矩阵

        println("矩阵元素减去一个标量",tensor3d_1.subi(-5));

        //矩阵相减

        println("三维矩阵相减",tensor3d_1.sub(tensor3d_2));

运算结果:

====创建空的三维矩阵===

[[[        0,        0,        0,        0],

  [        0,        0,        0,        0],

  [        0,        0,        0,        0]],

[[        0,        0,        0,        0],

  [        0,        0,        0,        0],

  [        0,        0,        0,        0]]]

====创建随机三维矩阵===

[[[    0.7030,    0.0575,    0.3288,    0.8928],

  [    0.7067,    0.4539,    0.6318,    0.8632],

  [    0.2914,    0.7980,    0.3350,    0.8783]],

[[    0.8559,    0.7396,    0.6039,    0.1946],

  [    0.5336,    0.9253,    0.4747,    0.2658],

  [    0.9690,    0.3269,    0.0520,    0.1754]]]

====矩阵元素减去一个标量===

[[[    5.0000,    5.0000,    5.0000,    5.0000],

  [    5.0000,    5.0000,    5.0000,    5.0000],

  [    5.0000,    5.0000,    5.0000,    5.0000]],

[[    5.0000,    5.0000,    5.0000,    5.0000],

  [    5.0000,    5.0000,    5.0000,    5.0000],

  [    5.0000,    5.0000,    5.0000,    5.0000]]]

====三维矩阵相减===

[[[    4.2970,    4.9425,    4.6712,    4.1072],

  [    4.2933,    4.5461,    4.3682,    4.1368],

  [    4.7086,    4.2020,    4.6650,    4.1217]],

[[    4.1441,    4.2604,    4.3961,    4.8054],

  [    4.4664,    4.0747,    4.5253,    4.7342],

  [    4.0310,    4.6731,    4.9480,    4.8246]]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,172评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,346评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,788评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,299评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,409评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,467评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,476评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,262评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,699评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,994评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,167评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,499评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,149评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,387评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,028评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,055评论 2 352

推荐阅读更多精彩内容

  • [{"reportDate": "2018-01-23 23:28:49","fluctuateCause": n...
    加勒比海带_4bbc阅读 767评论 1 2
  • StudyPHP 记录自己在学习PHP中的点点滴滴.并做上记录,仅供参考! var_dump补充: var_dum...
    Fqqqqqq阅读 183评论 0 0
  • 基础篇NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(...
    oyan99阅读 5,120评论 0 18
  • 有些人总喜欢“突显”自己,生怕别人看不见他。
    小尛_98b4阅读 63评论 0 0
  • 无题 文/舟亮 固气凝流雨未随,携寒带冷墨云堆。 漫涂翠树添金色,尤去东南喜鹊飞。
    舟亮阅读 379评论 0 4