github.com/gonum/matrix@v0.0.0-20181209220409-c518dec07be9/mat64/format_example_test.go (about)

     1  // Copyright ©2015 The gonum Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package mat64_test
     6  
     7  import (
     8  	"fmt"
     9  
    10  	"github.com/gonum/matrix/mat64"
    11  )
    12  
    13  func ExampleFormatted() {
    14  	a := mat64.NewDense(3, 3, []float64{1, 2, 3, 0, 4, 5, 0, 0, 6})
    15  
    16  	// Create a matrix formatting value with a prefix and calculating each column
    17  	// width individually...
    18  	fa := mat64.Formatted(a, mat64.Prefix("    "), mat64.Squeeze())
    19  
    20  	// and then print with and without zero value elements.
    21  	fmt.Printf("with all values:\na = %v\n\n", fa)
    22  	fmt.Printf("with only non-zero values:\na = % v\n\n", fa)
    23  
    24  	// Modify the matrix...
    25  	a.Set(0, 2, 0)
    26  
    27  	// and print it without zero value elements.
    28  	fmt.Printf("after modification with only non-zero values:\na = % v\n\n", fa)
    29  
    30  	// Modify the matrix again...
    31  	a.Set(0, 2, 123.456)
    32  
    33  	// and print it using scientific notation for large exponents.
    34  	fmt.Printf("after modification with scientific notation:\na = %.2g\n\n", fa)
    35  	// See golang.org/pkg/fmt/ floating-point verbs for a comprehensive list.
    36  
    37  	// Output:
    38  	// with all values:
    39  	// a = ⎡1  2  3⎤
    40  	//     ⎢0  4  5⎥
    41  	//     ⎣0  0  6⎦
    42  	//
    43  	// with only non-zero values:
    44  	// a = ⎡1  2  3⎤
    45  	//     ⎢.  4  5⎥
    46  	//     ⎣.  .  6⎦
    47  	//
    48  	// after modification with only non-zero values:
    49  	// a = ⎡1  2  .⎤
    50  	//     ⎢.  4  5⎥
    51  	//     ⎣.  .  6⎦
    52  	//
    53  	// after modification with scientific notation:
    54  	// a = ⎡1  2  1.2e+02⎤
    55  	//     ⎢0  4        5⎥
    56  	//     ⎣0  0        6⎦
    57  }
    58  
    59  func ExampleExcerpt() {
    60  	// Excerpt allows diagnostic display of very large
    61  	// matrices and vectors.
    62  
    63  	// The big matrix is too large to properly print...
    64  	big := mat64.NewDense(100, 100, nil)
    65  	for i := 0; i < 100; i++ {
    66  		big.Set(i, i, 1)
    67  	}
    68  
    69  	// so only print corner excerpts of the matrix.
    70  	fmt.Printf("excerpt big identity matrix: %v\n\n",
    71  		mat64.Formatted(big, mat64.Prefix(" "), mat64.Excerpt(3)))
    72  
    73  	// The long vector is also too large, ...
    74  	long := mat64.NewVector(100, nil)
    75  	for i := 0; i < 100; i++ {
    76  		long.SetVec(i, float64(i))
    77  	}
    78  
    79  	// ... so print end excerpts of the vector,
    80  	fmt.Printf("excerpt long column vector: %v\n\n",
    81  		mat64.Formatted(long, mat64.Prefix(" "), mat64.Excerpt(3)))
    82  	// or its transpose.
    83  	fmt.Printf("excerpt long row vector: %v\n",
    84  		mat64.Formatted(long.T(), mat64.Prefix(" "), mat64.Excerpt(3)))
    85  
    86  	// Output:
    87  	// excerpt big identity matrix: Dims(100, 100)
    88  	//  ⎡1  0  0  ...  ...  0  0  0⎤
    89  	//  ⎢0  1  0            0  0  0⎥
    90  	//  ⎢0  0  1            0  0  0⎥
    91  	//   .
    92  	//   .
    93  	//   .
    94  	//  ⎢0  0  0            1  0  0⎥
    95  	//  ⎢0  0  0            0  1  0⎥
    96  	//  ⎣0  0  0  ...  ...  0  0  1⎦
    97  	//
    98  	// excerpt long column vector: Dims(100, 1)
    99  	//  ⎡ 0⎤
   100  	//  ⎢ 1⎥
   101  	//  ⎢ 2⎥
   102  	//   .
   103  	//   .
   104  	//   .
   105  	//  ⎢97⎥
   106  	//  ⎢98⎥
   107  	//  ⎣99⎦
   108  	//
   109  	// excerpt long row vector: Dims(1, 100)
   110  	//  [ 0   1   2  ...  ...  97  98  99]
   111  
   112  }