1 /* 2 * Copyright 2004 The Apache Software Foundation. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package org.apache.commons.math.linear; 18 19 import java.math.BigDecimal; 20 21 /** 22 * A collection of static methods that operate on or return matrices. 23 * 24 * @version $Revision: 209143 $ $Date: 2005-07-04 16:29:23 -0700 (Mon, 04 Jul 2005) $ 25 */ 26 public class MatrixUtils { 27 28 /** 29 * Default constructor. Package scope to prevent unwanted instantiation. 30 */ 31 public MatrixUtils() { 32 super(); 33 } 34 35 /** 36 * Returns a {@link RealMatrix} whose entries are the the values in the 37 * the input array. The input array is copied, not referenced. 38 * 39 * @param data input array 40 * @return RealMatrix containing the values of the array 41 * @throws IllegalArgumentException if <code>data</code> is not rectangular 42 * (not all rows have the same length) or empty 43 * @throws NullPointerException if data is null 44 */ 45 public static RealMatrix createRealMatrix(double[][] data) { 46 return new RealMatrixImpl(data); 47 } 48 49 /** 50 * Returns <code>dimension x dimension</code> identity matrix. 51 * 52 * @param dimension dimension of identity matrix to generate 53 * @return identity matrix 54 * @throws IllegalArgumentException if dimension is not positive 55 * @since 1.1 56 */ 57 public static RealMatrix createRealIdentityMatrix(int dimension) { 58 RealMatrixImpl out = new RealMatrixImpl(dimension, dimension); 59 double[][] d = out.getDataRef(); 60 for (int row = 0; row < dimension; row++) { 61 for (int col = 0; col < dimension; col++) { 62 d[row][col] = row == col ? 1d : 0d; 63 } 64 } 65 return out; 66 } 67 68 /** 69 * Returns a {@link BigMatrix} whose entries are the the values in the 70 * the input array. The input array is copied, not referenced. 71 * 72 * @param data input array 73 * @return RealMatrix containing the values of the array 74 * @throws IllegalArgumentException if <code>data</code> is not rectangular 75 * (not all rows have the same length) or empty 76 * @throws NullPointerException if data is null 77 */ 78 public static BigMatrix createBigMatrix(double[][] data) { 79 return new BigMatrixImpl(data); 80 } 81 82 /** 83 * Returns a {@link BigMatrix} whose entries are the the values in the 84 * the input array. The input array is copied, not referenced. 85 * 86 * @param data input array 87 * @return RealMatrix containing the values of the array 88 * @throws IllegalArgumentException if <code>data</code> is not rectangular 89 * (not all rows have the same length) or empty 90 * @throws NullPointerException if data is null 91 */ 92 public static BigMatrix createBigMatrix(BigDecimal[][] data) { 93 return new BigMatrixImpl(data); 94 } 95 96 /** 97 * Returns a {@link BigMatrix} whose entries are the the values in the 98 * the input array. The input array is copied, not referenced. 99 * 100 * @param data input array 101 * @return RealMatrix containing the values of the array 102 * @throws IllegalArgumentException if <code>data</code> is not rectangular 103 * (not all rows have the same length) or empty 104 * @throws NullPointerException if data is null 105 */ 106 public static BigMatrix createBigMatrix(String[][] data) { 107 return new BigMatrixImpl(data); 108 } 109 110 /** 111 * Creates a row {@link RealMatrix} using the data from the input 112 * array. 113 * 114 * @param rowData the input row data 115 * @return a 1 x rowData.length RealMatrix 116 * @throws IllegalArgumentException if <code>rowData</code> is empty 117 * @throws NullPointerException if <code>rowData</code>is null 118 */ 119 public static RealMatrix createRowRealMatrix(double[] rowData) { 120 int nCols = rowData.length; 121 double[][] data = new double[1][nCols]; 122 System.arraycopy(rowData, 0, data[0], 0, nCols); 123 return new RealMatrixImpl(data); 124 } 125 126 /** 127 * Creates a row {@link BigMatrix} using the data from the input 128 * array. 129 * 130 * @param rowData the input row data 131 * @return a 1 x rowData.length BigMatrix 132 * @throws IllegalArgumentException if <code>rowData</code> is empty 133 * @throws NullPointerException if <code>rowData</code>is null 134 */ 135 public static BigMatrix createRowBigMatrix(double[] rowData) { 136 int nCols = rowData.length; 137 double[][] data = new double[1][nCols]; 138 System.arraycopy(rowData, 0, data[0], 0, nCols); 139 return new BigMatrixImpl(data); 140 } 141 142 /** 143 * Creates a row {@link BigMatrix} using the data from the input 144 * array. 145 * 146 * @param rowData the input row data 147 * @return a 1 x rowData.length BigMatrix 148 * @throws IllegalArgumentException if <code>rowData</code> is empty 149 * @throws NullPointerException if <code>rowData</code>is null 150 */ 151 public static BigMatrix createRowBigMatrix(BigDecimal[] rowData) { 152 int nCols = rowData.length; 153 BigDecimal[][] data = new BigDecimal[1][nCols]; 154 System.arraycopy(rowData, 0, data[0], 0, nCols); 155 return new BigMatrixImpl(data); 156 } 157 158 /** 159 * Creates a row {@link BigMatrix} using the data from the input 160 * array. 161 * 162 * @param rowData the input row data 163 * @return a 1 x rowData.length BigMatrix 164 * @throws IllegalArgumentException if <code>rowData</code> is empty 165 * @throws NullPointerException if <code>rowData</code>is null 166 */ 167 public static BigMatrix createRowBigMatrix(String[] rowData) { 168 int nCols = rowData.length; 169 String[][] data = new String[1][nCols]; 170 System.arraycopy(rowData, 0, data[0], 0, nCols); 171 return new BigMatrixImpl(data); 172 } 173 174 /** 175 * Creates a column {@link RealMatrix} using the data from the input 176 * array. 177 * 178 * @param columnData the input column data 179 * @return a columnData x 1 RealMatrix 180 * @throws IllegalArgumentException if <code>columnData</code> is empty 181 * @throws NullPointerException if <code>columnData</code>is null 182 */ 183 public static RealMatrix createColumnRealMatrix(double[] columnData) { 184 int nRows = columnData.length; 185 double[][] data = new double[nRows][1]; 186 for (int row = 0; row < nRows; row++) { 187 data[row][0] = columnData[row]; 188 } 189 return new RealMatrixImpl(data); 190 } 191 192 /** 193 * Creates a column {@link BigMatrix} using the data from the input 194 * array. 195 * 196 * @param columnData the input column data 197 * @return a columnData x 1 BigMatrix 198 * @throws IllegalArgumentException if <code>columnData</code> is empty 199 * @throws NullPointerException if <code>columnData</code>is null 200 */ 201 public static BigMatrix createColumnBigMatrix(double[] columnData) { 202 int nRows = columnData.length; 203 double[][] data = new double[nRows][1]; 204 for (int row = 0; row < nRows; row++) { 205 data[row][0] = columnData[row]; 206 } 207 return new BigMatrixImpl(data); 208 } 209 210 /** 211 * Creates a column {@link BigMatrix} using the data from the input 212 * array. 213 * 214 * @param columnData the input column data 215 * @return a columnData x 1 BigMatrix 216 * @throws IllegalArgumentException if <code>columnData</code> is empty 217 * @throws NullPointerException if <code>columnData</code>is null 218 */ 219 public static BigMatrix createColumnBigMatrix(BigDecimal[] columnData) { 220 int nRows = columnData.length; 221 BigDecimal[][] data = new BigDecimal[nRows][1]; 222 for (int row = 0; row < nRows; row++) { 223 data[row][0] = columnData[row]; 224 } 225 return new BigMatrixImpl(data); 226 } 227 228 /** 229 * Creates a column {@link BigMatrix} using the data from the input 230 * array. 231 * 232 * @param columnData the input column data 233 * @return a columnData x 1 BigMatrix 234 * @throws IllegalArgumentException if <code>columnData</code> is empty 235 * @throws NullPointerException if <code>columnData</code>is null 236 */ 237 public static BigMatrix createColumnBigMatrix(String[] columnData) { 238 int nRows = columnData.length; 239 String[][] data = new String[nRows][1]; 240 for (int row = 0; row < nRows; row++) { 241 data[row][0] = columnData[row]; 242 } 243 return new BigMatrixImpl(data); 244 } 245 246 /** 247 * Returns <code>dimension x dimension</code> identity matrix. 248 * 249 * @param dimension dimension of identity matrix to generate 250 * @return identity matrix 251 * @throws IllegalArgumentException if dimension is not positive 252 * @since 1.1 253 */ 254 public static BigMatrix createBigIdentityMatrix(int dimension) { 255 BigMatrixImpl out = new BigMatrixImpl(dimension, dimension); 256 BigDecimal[][] d = out.getDataRef(); 257 for (int row = 0; row < dimension; row++) { 258 for (int col = 0; col < dimension; col++) { 259 d[row][col] = row == col ? BigMatrixImpl.ONE : BigMatrixImpl.ZERO; 260 } 261 } 262 return out; 263 } 264 265 } 266