在闡述我的意見,讓我們說你有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