Matrix transposition: Difference between revisions

→‎{{header|Go}}: improve transpose in place to working program, add library solution.
(→‎{{header|Go}}: improve transpose in place to working program, add library solution.)
Line 850:
return r
}</lang>
{{out}}
Output:
<pre>[1 2 3]
[4 5 6]
Line 911:
return r
}</lang>
{{out}}
Output:
<pre>
original:
Line 924:
===Transpose in place===
{{trans|C}}
Note representation is "flat," as above.
<lang go>func (m *matrix) transposeInPlace() {
<lang go>package main
 
import "fmt"
 
type matrix struct {
ele []float64
stride int
}
 
// construct new matrix from slice of slices
func matrixFromRows(rows [][]float64) *matrix {
if len(rows) == 0 {
return &matrix{nil, 0}
}
m := &matrix{make([]float64, len(rows)*len(rows[0])), len(rows[0])}
for rx, row := range rows {
copy(m.ele[rx*m.stride:(rx+1)*m.stride], row)
}
return m
}
 
func main() {
m := matrixFromRows([][]float64{
{1, 2, 3},
{4, 5, 6},
})
m.print("original:")
m.transposeInPlace()
m.print("transpose:")
}
 
func (m *matrix) print(heading string) {
if heading > "" {
fmt.Print("\n", heading, "\n")
}
for e := 0; e < len(m.ele); e += m.stride {
fmt.Println(m.ele[e : e+m.stride])
}
}
 
<lang go>func (m *matrix) transposeInPlace() {
h := len(m.ele) / m.stride
for start := range m.ele {
Line 957 ⟶ 998:
m.stride = h
}</lang>
Output same as above.
===Library===
<lang go>package main
 
import (
"fmt"
 
mat "github.com/skelterjohn/go.matrix"
)
 
func main() {
m := mat.MakeDenseMatrixStacked([][]float64{
{1, 2, 3},
{4, 5, 6},
})
fmt.Println("original:")
fmt.Println(m)
m = m.Transpose()
fmt.Println("transpose:")
fmt.Println(m)
}</lang>
{{out}}
<pre>
original:
{1, 2, 3,
4, 5, 6}
transpose:
{1, 4,
2, 5,
3, 6}
</pre>
 
=={{header|Groovy}}==
1,707

edits