假设我有一个 n x n 的二维矩阵,已知 n=4,其值为 1 - 16,如下图所示:
我需要按以下方式进行乘法运算:
Array1*Array2 = result
Array3*result = result1
Array4*result1 = result2
![this](https://s7.postimg.org/eqw4qbzvv/prog.jpg)
我需要按以下方式进行乘法运算:
Array1*Array2 = result
Array3*result = result1
Array4*result1 = result2
ShowMatrix()
{
echo "MyMatrix is:"
for((i=0;i<$n;i++))do
for((j=0;j<$n;j++))do
printf ' '${myArray[i*n+j]}
done
printf '\n';
done
}
我尝试按照架构将其分为4个部分,并将每个部分分配给Array1、Array2、Array3和Array4
cut1()
{
for((i=0;i<$n/2;i++))do
for((j=0;j<$n/2;j++))do
Array1[i*n+j]=${myArray[i*n+j]}
done
done
}
cut2()
{
for((i=0;i<$n/2;i++))do
for((j=$n/2;j<$n;j++))do
Array2[i*n+j]=${myArray[i*n+j]}
done
done
}
cut3()
{
for((i=$n/2;i<$n;i++))do
for((j=0;j<$n/2;j++))do
Array3[i*n+j]=${myArray[i*n+j]}
done
done
}
cut4()
{
for((i=$n/2;i<$n;i++))do
for((j=$n/2;j<$n;j++))do
Array4[i*n+j]=${myArray[i*n+j]}
done
done
}
接下来,我尝试按照如下示意图将它们相乘:
Array1*Array2 = result
Array3*result = result1
Array4*result1 = result2
multiply()
{
for((i=0;i<$n;i++))do
for((j=0;j<$n;j++))do
result[i*n+j]=0
for((k=0;k<$n;k++))do
let "result[i*n+j]=${result[i*n+j]}+${Array1[i*n+k]}*${Array2[k*n+j]}"
done
done
done
}
multiply1()
{
for((i=0;i<$n;i++))do
for((j=0;j<$n;j++))do
result1[i*n+j]=0
for((k=0;k<$n;k++))do
let "result1[i*n+j]=${result1[i*n+j]}+${result[i*n+k]}*${Array3[k*n+j]}"
done
done
done
}
multiply2()
{
for((i=0;i<$n;i++))do
for((j=0;j<$n;j++))do
result2[i*n+j]=0
for((k=0;k<$n;k++))do
let "result2[i*n+j]=${result2[i*n+j]}+${result1[i*n+k]}*${Array4[k*n+j]}"
done
done
done
}
在我调用函数后的结果如下:
cut1
cut2
cut3
cut4
multiply
multiply1
multiply2
echo "result is:"
for((i=0;i<$n;i++))do
for((j=0;j<$n;j++))do
printf ' '${result[i*n+j]}
done
printf '\n';
done
echo "result1 is:"
for((i=0;i<$n;i++))do
for((j=0;j<$n;j++))do
printf ' '${result1[i*n+j]}
done
printf '\n';
done
echo "result2 is:"
for((i=0;i<$n;i++))do
for((j=0;j<$n;j++))do
printf ' '${result2[i*n+j]}
done
printf '\n';
done
sed
来做,因为sed
是计算上完备的;但这比使用Bash还要荒谬。 - Jonathan Leffler${variable[$((3*2+2))]}
可以工作(访问元素8),${variable[$(($i*$n+$j))]}
和${variable[$((i*n+j))]}
也可以适用于合适的i
、n
和j
值。然而,我仍然认为使用Bash来完成这个任务不是一个好主意,但显然变态的老师们认为相反。 - Jonathan Leffler