How can get the dimension of a matrix in go-lang?

2.4k Views Asked by At

Here is the piece of code:

package main
import (
 "fmt"
 "gonum.org/v1/gonum/mat"
)
func main() {
  // Matrix and Vector

  // Initialize a Matrix A
  row1 := []float64{1,2,3}
  row2 := []float64{4,5,6}
  row3 := []float64{7,8,9}
  row4 := []float64{10,11,12}

  A := mat.NewDense(4,3,nil)
  A.SetRow(0, row1)
  A.SetRow(1, row2)
  A.SetRow(2, row3)
  A.SetRow(3, row4)

  fmt.Printf("A :\n%v\n\n", mat.Formatted(A, mat.Prefix(""), mat.Excerpt(0)))

  // Initialize a Vector v
  v := mat.NewDense(3,1, []float64{1,2,3})
  fmt.Printf("v :\n%v\n\n", mat.Formatted(v, mat.Prefix(""), mat.Excerpt(0)))

  //Get the dimension of the matrix A where m = rows and n = cols
  row, col := len(A)
  // row, col := size(A)
  fmt.Println("row: ", row)
  fmt.Println("col: ", col)

}

Error: invalid argument A (type *mat.Dense) for len

When I use size to determine the dimensions of the matrix A. Then it gives me an error undefined: size.

How can I get dimensions of the matrix A?

3

There are 3 best solutions below

0
peterSO On BEST ANSWER

package mat

import "gonum.org/v1/gonum/mat" 

func (*Dense) Dims

func (m *Dense) Dims() (r, c int)

Dims returns the number of rows and columns in the matrix.


For example,

package main

import (
    "fmt"

    "gonum.org/v1/gonum/mat"
)

func main() {
    row1 := []float64{1, 2, 3}
    row2 := []float64{4, 5, 6}
    row3 := []float64{7, 8, 9}
    row4 := []float64{10, 11, 12}

    A := mat.NewDense(4, 3, nil)
    A.SetRow(0, row1)
    A.SetRow(1, row2)
    A.SetRow(2, row3)
    A.SetRow(3, row4)

    fmt.Printf("A matrix:\n%v\n\n", mat.Formatted(A, mat.Prefix(""), mat.Excerpt(0)))

    //Get the dimensions of the matrix A
    rows, cols := A.Dims()
    fmt.Println("A: rows: ", rows)
    fmt.Println("A: cols: ", cols)
}

Output:

A matrix:
⎡ 1   2   3⎤
⎢ 4   5   6⎥
⎢ 7   8   9⎥
⎣10  11  12⎦

A: rows:  4
A: cols:  3
0
cgcgbcbc On

len is used for builtin types like array, slice, etc.

From the document of the package, you should use Dims() to access row size and column size

try godoc gonum.org/v1/gonum/mat and find the following sections:

func (m *Dense) Dims() (r, c int)
Dims returns the number of rows and columns in the matrix.
0
leaf bebop On

You can use Dims() method to get number of rows and cols in a matrix.

See: https://godoc.org/gonum.org/v1/gonum/mat#Dense.Dims