DL4J实战之五:矩阵操作基本功 (4)

在这里插入图片描述

矩阵所有元素值累加:sum

INDArray indArray16 = Nd4j.create(new float[] {1, 2, 3, 4, 5, 6}, new int[] {2,3}); // 总和 double sum = indArray16.sum().getDouble(); System.out.println("矩阵元素累加和 : " + sum);

执行结果

矩阵元素累加和 : 21.0

转置操作(不改变源对象):transpose

INDArray indArray16 = Nd4j.create(new float[] {1, 2, 3, 4, 5, 6}, new int[] {2,3}); disp("转置前", indArray16); disp("转置操作", indArray16.transpose()); disp("transpose操作后的原值(不变)", indArray16);

执行结果,可见2行3列转置后变成了3行2列,但是生成了新对象,而源对象未改变

转置前 维度 : 2 形状 : [2, 3] 完整矩阵 : [[ 1.0000, 2.0000, 3.0000], [ 4.0000, 5.0000, 6.0000]] ***************************************************** 转置操作 维度 : 2 形状 : [3, 2] 完整矩阵 : [[ 1.0000, 4.0000], [ 2.0000, 5.0000], [ 3.0000, 6.0000]] ***************************************************** transpose操作后的原值(不变) 维度 : 2 形状 : [2, 3] 完整矩阵 : [[ 1.0000, 2.0000, 3.0000], [ 4.0000, 5.0000, 6.0000]]

转置操作(源对象被改变):transposei

INDArray indArray16 = Nd4j.create(new float[] {1, 2, 3, 4, 5, 6}, new int[] {2,3}); disp("转置前", indArray16); disp("转置操作", indArray16.transposei()); disp("transposei操作后的原值(已变)", indArray16);

执行结果

转置前 维度 : 2 形状 : [2, 3] 完整矩阵 : [[ 1.0000, 2.0000, 3.0000], [ 4.0000, 5.0000, 6.0000]] ***************************************************** 转置操作 维度 : 2 形状 : [3, 2] 完整矩阵 : [[ 1.0000, 4.0000], [ 2.0000, 5.0000], [ 3.0000, 6.0000]] ***************************************************** transposei操作后的原值(已变) 维度 : 2 形状 : [3, 2] 完整矩阵 : [[ 1.0000, 4.0000], [ 2.0000, 5.0000], [ 3.0000, 6.0000]]

横向拼接:hstack,要求两个矩阵行数相等

// 2行3列 INDArray indArray17 = Nd4j.create(new float[] {1, 2, 3, 4, 5, 6}, new int[] {2,3}); // 2行1列 INDArray indArray18 = Nd4j.create(new float[] {1, 2}, new int[] {2,1}); disp("源矩阵", indArray17); disp("拼接上的矩阵", indArray18); // 2行3列的矩阵,横向拼接一列后,变成了2行4列 disp("横向拼接(每一行都增加一列)", Nd4j.hstack(indArray17, indArray18));

执行结果如下图,可见是把indArray18 横着拼到indArray17 的右侧

在这里插入图片描述

纵向拼接:vstack,要求两个矩阵列数相等

// 2行3列 INDArray indArray19 = Nd4j.create(new float[] {1, 2, 3, 4, 5, 6}, new int[] {2,3}); // 1行3列 INDArray indArray20 = Nd4j.create(new float[] {1, 2, 3}, new int[] {1,3}); disp("源矩阵", indArray17); disp("拼接上的矩阵", indArray18); // 2行3列的矩阵,纵向拼接一行,变成了3行3列 disp("纵向拼接(增加一行)", Nd4j.vstack(indArray19, indArray20));

执行结果如下图,可见是把indArray20放在了indArray19的底部

在这里插入图片描述

以上就是矩阵操作的常用API了,希望能给您一些参考,在深度学习的开发中更熟练的操作数据

你不孤单,欣宸原创一路相伴

Java系列

Spring系列

Docker系列

kubernetes系列

数据库+中间件系列

DevOps系列

欢迎关注公众号:程序员欣宸

微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...
https://github.com/zq2599/blog_demos

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzwzdj.html