func (cef *Cef) SwapColumns(i, j int) {
	for ix := 0; ix < len(cef.ColumnAttributes); ix++ {
		temp := cef.ColumnAttributes[ix].Values[i]
		cef.ColumnAttributes[ix].Values[i] = cef.ColumnAttributes[ix].Values[j]
		cef.ColumnAttributes[ix].Values[j] = temp
	}
	return
	for ix := 0; ix < cef.Rows; ix++ {
		temp := cef.Get(ix, i)
		cef.Set(ix, i, cef.Get(ix, j))
		cef.Set(ix, j, temp)
	}
}
Support the Permutable2D interface
package ceftools
import (
	"errors"
	"fmt"
	"os"
	"sort"
	"strconv"
	"strings"
)
type Attribute struct {
	Name   string
	Values []string
}
type Header struct {
	Name  string
	Value string
}
const (
	Transposed = 1 << iota
)
const (
	MajorVersion = 0
	MinorVersion = 1
	MagicCEB     = 0x09424543
	MagicCEF     = 0x09464543
)
type Cef struct {
	Rows             int
	Columns          int
	Headers          []Header
	Flags            int
	RowAttributes    []Attribute
	ColumnAttributes []Attribute
	Matrix           []float32
}
func (cef *Cef) Get(row int, col int) float32 {
	return cef.Matrix[col+row*cef.Columns]
}
func (cef *Cef) Set(row int, col int, val float32) {
	cef.Matrix[col+row*cef.Columns] = val
}
func (cef *Cef) GetRow(row int) []float32 {
	return cef.Matrix[row*cef.Columns : (row+1)*cef.Columns]
}
func (cef *Cef) GetMatrix() *Matrix {
	temp := new(Matrix)
	temp.Rows = cef.Rows
	temp.Columns = cef.Columns
	temp.Matrix = cef.Matrix
	return temp
}
func (cef *Cef) SwapRows(i, j int) {
	for ix := 0; ix < len(cef.RowAttributes); ix++ {
		temp := cef.RowAttributes[ix].Values[i]
		cef.RowAttributes[ix].Values[i] = cef.RowAttributes[ix].Values[j]
		cef.RowAttributes[ix].Values[j] = temp
	}
	for ix := 0; ix < cef.Columns; ix++ {
		temp := cef.Get(i, ix)
		cef.Set(i, ix, cef.Get(j, ix))
		cef.Set(j, ix, temp)
	}
}