在阐述我的意见,让我们说你有4所列出如下,以列表的内容有一些字母代替变量(即不应该造成任何问题)
set EarthquakesNameForFactorLineNO [list a b c d e]
set EarthquakesNameForFactor [list f g h i j]
set FirstRow [list k l m n o]
set SecondRow [list p q r s t]
现在,获得其矩阵,我们会包含所有4所列出的清单:
set matrix1 [list $EarthquakesNameForFactorLineNO $EarthquakesNameForFactor $FirstRow $SecondRow]
# Equivalent to
# set matrix1 [list [list a b c d e] [list f g h i g] [list k l m n o] [list p q r s t]]
如果你想看到一个4x5的方式是“矩阵”,你只需要打印的清单,以新行加入:
puts [join $matrix1 \n]
# This displays:
# a b c d e
# f g h i g
# k l m n o
# p q r s t
然后你可以使用一些基本的循环来获得转置矩阵。内部循环遍历行,而外部循环遍历列。 matrix2
将是转置矩阵,newrow
将具有转置矩阵中的当前行。由于循环的设置方式,以下内容将首先在每行中添加所有第一个值,然后在每一行中添加所有第二个值,依此类推。
set matrix2 [list]
for {set column 0} {$column < [llength [lindex $matrix1 0]]} {incr column} {
set newrow [list]
foreach row $matrix1 {
lappend newrow [lindex $row $column]
}
lappend matrix2 $newrow
}
puts [join $matrix2 \n]
针对上述情况,如果你想要一个循环,你可以用下面可能更复杂的循环:
for {set a 0; set b 0} {
$a < [llength [lindex $matrix1 0]] && $b <= [llength $matrix1]
} {incr b} {
if {$b == [llength $matrix1]} {
set b -1
incr a
lappend matrix2 $newrow
set newrow [list]
} else {
lappend newrow [lindex $matrix1 $b $a]
}
}
puts [join $matrix2 \n]
无论你选择,如果你使用这个有很多,你可以希望把上面的一个进程:
proc transpose_matrix {matrix1} {
for {set a 0; set b 0} {
$a < [llength [lindex $matrix1 0]] && $b <= [llength $matrix1]
} {incr b} {
if {$b == [llength $matrix1]} {
set b -1
incr a
lappend matrix2 $newrow
set newrow [list]
} else {
lappend newrow [lindex $matrix1 $b $a]
}
}
return $matrix2
}
在这之后,只要您拨打
你会得到
matrix2
置矩阵
set matrix2 [transpose_matrix $matrix1]
请注意,如果您有长度是可变的数字或文字,显示可能不会太漂亮......例如,与其他值,矩阵可能看起来像:
1.45 1 2 310 43
0 2.3 10 20 13
342.04 11.49 87.32 0.987 2.3
3.2 12.45 11.11 43.2 35
这可能很难阅读...但后来,这是一个不同的问题:)
我试图改善你的问题的格式;请仔细检查! (您寻找的术语不是“反转”,而是“转置”。) – 2015-03-13 09:32:21
谢谢。你是对的。转置矩阵。第一个问题的解释是:我如何在tcl中构建Matrix。例如我有4 [list]:[list1] [list2] [list3]和[list4],他们都是1 * 20,现在我想用这四个列表构建[Matrix] 4 * 20。我搜索像llappend这样的命令,在矩阵中逐行添加列表。由于某种原因,我无法使用split命令,而是寻找另一种方式。最后,我应该说我在说英语方面不够专业和本地化。对不起,我可怕的语言。 – 2015-03-13 10:58:34
你的意思是[this](http://codepad.org/Dtx9fSGd)?确切地说, – Jerry 2015-03-13 11:51:21