一、方阵的转置(JAVA实现)
(方阵的转制比较容易实现,无需借助其它矩阵,只需要一个临时变量,用于矩阵中两个位置数据的交换即可,本例中的temp即是该作用)
package test;
public class Test3
{
public static void main(String[] args)
{
int Array[][] = { { 1, 2, 3, 9 }, { 4, 5, 6, 8 }, { 7, 8, 9, 2 }, { 0, 2, 3, 4 } }; //定义四行四列的方阵
//输出原矩阵
System.out.println("原矩阵为:");
for (int i = 0; i < Array.length; i++)
{
for (int j = 0; j < Array[i].length; j++)
{
System.out.print(Array[i][j] + " ");
}
System.out.println();
}
//在原矩阵上进行位置互换,实现转置
int temp;
for (int i = 0; i < Array.length; i++)
{
for (int j = i; j < Array.length; j++) // "j=i"是很重要的,不能j=0开始,否则转置后的矩阵再次进行转置(调换位置后的两个数据再次进行了位置调换),恢复到了原矩阵
{
temp = Array[i][j];
Array[i][j] = Array[j][i];
Array[j][i] = temp;
}
}
//输出转制后的矩阵
System.out.println("转置后矩阵为:");
for (int k = 0; k < Array.length; k++)
{
for (int L = 0; L < Array[k].length; L++)
{
System.out.print(Array[k][L] + " ");
}
System.out.println();
}
}
}
输出结果如下图所示:
二、稀疏矩阵的转置(JAVA实现)
(稀疏矩阵是指矩阵中有许多的0或者其它的相同元素,该代码实现非满矩阵的转置,转制后的位置若没有值,则输出空格)
package test;
public class Test
{
public static void main(String[] args)
{
int arr[][] = { { 1, 2, 3, 6}, { 4, 5}, { 7, 8, 9, 10}, {12}};
int max = arr[0].length;// 获取矩阵中所有行的列数目的最大值(这个最大值即为转置后矩阵的行数)
int row = arr.length; //原矩阵的行数
for (int i = 1; i < row; i++)
{
if (arr[i].length > max)
{
max = arr[i].length;
}
}
//定义转制后的矩阵arr2,并进行初始化。原矩阵的行数是转置后矩阵的列数,原数矩阵的列数是转置后矩阵的行数。
int arr2[][] = new int[max][row];
// 对arr2进行赋值
for (int i = 0; i < row; i++)
{
for (int j = 0; j < arr[i].length; j++)
{
arr2[j][i] = arr[i][j];
}
}
// 输出原来矩阵arr
System.out.println("原来的矩阵为;");
for (int i = 0; i <row; i++)
{
for (int j = 0; j < arr[i].length; j++)
{
System.out.print(arr[i][j] + " "); //两个空格
}
System.out.println();
}
// 输出转置后的矩阵arr2
System.out.println("转置后的矩阵为:");
for (int i = 0; i < arr2.length; i++)
{
for (int j = 0; j < arr2[i].length; j++)
{
if (arr2[i][j] != 0)
System.out.print(arr2[i][j] + " ");//两个空格
else
System.out.print(" "); //三个空格
}
System.out.println();
}
}
}
输出结果如下图所示:
三、稀疏矩阵的转置(JS实现)
<script language="javascript">
var arr = [ [ 1, 2, 3, 6], [ 4, 5], [ 7, 8, 9, 10],["a", "b"]]; //JS元素值可以为任意类型,这里的矩阵有数字,也有字母。
var arr1=[];
var max = arr[0].length; //max为原矩阵所有行中列数最大的值,该值为新矩阵的行数。
var row = arr.length; //原矩阵的行数
for (var i = 1; i < row; i++) //求max的最大值
{
if (arr[i].length > max)
{
max = arr[i].length;
}
}
// window.alert("原矩阵最大行数为:"+row);
// window.alert("原矩阵最大列数为:"+max);
//初始化arr1矩阵,定下有多少行。(必须这样,否则无法为arr2动态添加数据,下面“********”行会报错。)
for(var i=0;i<max;i++)
{
arr1[i]=[];
}
//遍历原矩阵,动态的为矩阵arr2添加数据
for(var i=0;i<row;i++)
{
for(var j=0;j<arr[i].length;j++)
{
arr1[j][i]=arr[i][j]; //********************************
}
}
document.writeln("原来的矩阵:");
document.write("<br/>");
for(var i=0;i<arr.length;i++)
{
for(var j=0;j<arr[i].length;j++)
{
document.writeln(arr[i][j]+" ");
}
document.write("<br/>");
}
document.writeln("转置后的矩阵:");
document.write("<br/>");
for(var i=0;i<arr1.length;i++)
{
for(var j=0;j<arr1[i].length;j++)
{
if(arr1[i][j]==null)
document.writeln(" ");
else
document.writeln(arr1[i][j]+" ");
}
document.write("<br/>");
}
</script>
输出结果如下图所示: