VFP中矩阵转置(行列转换)算法探讨

作者在 2015-04-24 02:47:43 发布以下内容


clear
local aa[5,4]
aa[1,1]=1
aa[1,2]=2
aa[1,3]=12
aa[1,4]=123
aa[2,1]=3
aa[2,2]=4
aa[2,3]=34
aa[2,4]=345
aa[3,1]=5
aa[3,2]=6
aa[3,3]=56
aa[3,4]=567
aa[4,1]=7
aa[4,2]=8
aa[4,3]=78
aa[4,4]=789
aa[5,1]=9
aa[5,2]=10
aa[5,3]=910
aa[5,4]=901
*-----------------------------------------
*    转换前                 转换后
*-----------------------------------------
* 1  2  12  123      1   3   5   7   9
* 3  4  34  345      2   4   6   8  10
* 5  6  56  567     12  34  56  78 910 
* 7  8  78  789    123 345 567 789 901
* 9 10 910  901     
*-----------------------------------------
* 分析:转换前的数组为5行4列,转换后的数组要求为4行5列,这就是矩阵转置,也就是我们通常所说的行转换为列。
*  转换前:      转换后(假设转换后的数组为bb)
*  aa[1,1]=1     bb[1,1]=1
*  aa[2,1]=3     bb[1,2]=3
*  aa[3,1]=5     bb[1,3]=5
*  aa[4,1]=7     bb[1,4]=7
*  aa[5,1]=9     bb[1,5]=9
*  aa[1,2]=2     bb[2,1]=2
*  aa[2,2]=4     bb[2,2]=4
*  aa[3,2]=6     bb[2,3]=6
*  aa[4,2]=8     bb[2,4]=8
*  aa[5,2]=10    bb[2,5]=10
* 其它的数据也是这样的规律,大家可以自己比较
* 从上面可以看出一个规律,转换前数组的行下标,即为转换后数组的列下标;转换前数组的列下标,即为转换后数组的行下标。
* 通过上面的分析,就可以用VFP的 asubscript() 获取到转换前数组元素的行下标与列下表,具体代码如下:

local bb[alen(aa,2),alen(aa,1)]
for i=1 to alen(aa)
    nr=asubscript(aa,i,1) && 行下标
    nc=asubscript(aa,i,2) && 列下标
    bb[nc,nr]=aa[i]
endfor
* 显示结果
list memory like bb



算法 | 阅读 4046 次
文章评论,共0条
游客请输入验证码
浏览380657次