57 lines
1.1 KiB
Go
57 lines
1.1 KiB
Go
package main
|
|
|
|
import "fmt"
|
|
|
|
type md struct {
|
|
dim []int
|
|
ele []float64
|
|
}
|
|
|
|
func newMD(dim ...int) *md {
|
|
n := 1
|
|
for _, d := range dim {
|
|
n *= d
|
|
}
|
|
return &md{append([]int{}, dim...), make([]float64, n)}
|
|
}
|
|
|
|
func (m *md) index(i ...int) (x int) {
|
|
for d, dx := range m.dim {
|
|
x = x*dx + i[d]
|
|
}
|
|
return
|
|
}
|
|
|
|
func (m *md) at(i ...int) float64 {
|
|
return m.ele[m.index(i...)]
|
|
}
|
|
|
|
func (m *md) set(x float64, i ...int) {
|
|
m.ele[m.index(i...)] = x
|
|
}
|
|
|
|
func (m *md) show(i ...int) {
|
|
fmt.Printf("m%d = %g\n", i, m.at(i...))
|
|
}
|
|
|
|
func main() {
|
|
m := newMD(5, 4, 3, 2)
|
|
m.show(4, 3, 2, 1)
|
|
m.set(87, 4, 3, 2, 1)
|
|
m.show(4, 3, 2, 1)
|
|
|
|
for i := 0; i < m.dim[0]; i++ {
|
|
for j := 0; j < m.dim[1]; j++ {
|
|
for k := 0; k < m.dim[2]; k++ {
|
|
for l := 0; l < m.dim[3]; l++ {
|
|
x := m.index(i, j, k, l)
|
|
m.set(float64(x)+.1, i, j, k, l)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
fmt.Println(m.ele[:10])
|
|
fmt.Println(m.ele[len(m.ele)-10:])
|
|
m.show(4, 3, 2, 1)
|
|
}
|