gonum.org/v1/gonum@v0.14.0/mat/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 mat_test 6 7 import ( 8 "fmt" 9 10 "gonum.org/v1/gonum/mat" 11 ) 12 13 func ExampleFormatted() { 14 a := mat.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 := mat.Formatted(a, mat.Prefix(" "), mat.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 ExampleFormatted_mATLAB() { 60 a := mat.NewDense(3, 3, []float64{1, 2, 3, 0, 4, 5, 0, 0, 6}) 61 62 // Create a matrix formatting value using MATLAB format... 63 fa := mat.Formatted(a, mat.FormatMATLAB()) 64 65 // and then print with and without layout formatting. 66 fmt.Printf("standard syntax:\na = %v\n\n", fa) 67 fmt.Printf("layout syntax:\na = %#v\n\n", fa) 68 69 // Output: 70 // standard syntax: 71 // a = [1 2 3; 0 4 5; 0 0 6] 72 // 73 // layout syntax: 74 // a = [ 75 // 1 2 3 76 // 0 4 5 77 // 0 0 6 78 // ] 79 } 80 81 func ExampleFormatted_python() { 82 a := mat.NewDense(3, 3, []float64{1, 2, 3, 0, 4, 5, 0, 0, 6}) 83 84 // Create a matrix formatting value with a prefix using Python format... 85 fa := mat.Formatted(a, mat.Prefix(" "), mat.FormatPython()) 86 87 // and then print with and without layout formatting. 88 fmt.Printf("standard syntax:\na = %v\n\n", fa) 89 fmt.Printf("layout syntax:\na = %#v\n\n", fa) 90 91 // Output: 92 // standard syntax: 93 // a = [[1, 2, 3], [0, 4, 5], [0, 0, 6]] 94 // 95 // layout syntax: 96 // a = [[1, 2, 3], 97 // [0, 4, 5], 98 // [0, 0, 6]] 99 } 100 101 func ExampleExcerpt() { 102 // Excerpt allows diagnostic display of very large 103 // matrices and vectors. 104 105 // The big matrix is too large to properly print... 106 big := mat.NewDense(100, 100, nil) 107 for i := 0; i < 100; i++ { 108 big.Set(i, i, 1) 109 } 110 111 // so only print corner excerpts of the matrix. 112 fmt.Printf("excerpt big identity matrix: %v\n\n", 113 mat.Formatted(big, mat.Prefix(" "), mat.Excerpt(3))) 114 115 // The long vector is also too large, ... 116 long := mat.NewVecDense(100, nil) 117 for i := 0; i < 100; i++ { 118 long.SetVec(i, float64(i)) 119 } 120 121 // ... so print end excerpts of the vector, 122 fmt.Printf("excerpt long column vector: %v\n\n", 123 mat.Formatted(long, mat.Prefix(" "), mat.Excerpt(3))) 124 // or its transpose. 125 fmt.Printf("excerpt long row vector: %v\n", 126 mat.Formatted(long.T(), mat.Prefix(" "), mat.Excerpt(3))) 127 128 // Output: 129 // excerpt big identity matrix: Dims(100, 100) 130 // ⎡1 0 0 ... ... 0 0 0⎤ 131 // ⎢0 1 0 0 0 0⎥ 132 // ⎢0 0 1 0 0 0⎥ 133 // . 134 // . 135 // . 136 // ⎢0 0 0 1 0 0⎥ 137 // ⎢0 0 0 0 1 0⎥ 138 // ⎣0 0 0 ... ... 0 0 1⎦ 139 // 140 // excerpt long column vector: Dims(100, 1) 141 // ⎡ 0⎤ 142 // ⎢ 1⎥ 143 // ⎢ 2⎥ 144 // . 145 // . 146 // . 147 // ⎢97⎥ 148 // ⎢98⎥ 149 // ⎣99⎦ 150 // 151 // excerpt long row vector: Dims(1, 100) 152 // [ 0 1 2 ... ... 97 98 99] 153 }