Libraryless. Click here for Pure Java version (2687L/17K).
/******************************************************************************* * Copyright (c) 2010-2019 Haifeng Li * * Smile is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of * the License, or (at your option) any later version. * * Smile is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Smile. If not, see <https://www.gnu.org/licenses/>. *******************************************************************************/ sclass IntArray2D implements IIntArray2D { private int[] A; private int nrows; private int ncols; public IntArray2D(int[][] A) { this.nrows = A.length; this.ncols = A[0].length; this.A = new int[nrows*ncols]; int pos = 0; for (int i = 0; i < nrows; i++) { System.arraycopy(A[i], 0, this.A, pos, ncols); pos += ncols; } } /** * Constructor of all-zero matrix. */ public IntArray2D(int rows, int cols) { this.nrows = rows; this.ncols = cols; A = new int[rows*cols]; } /** * Constructor. Fill the matrix with given value. */ public IntArray2D(int rows, int cols, int value) { this(rows, cols); if (value != 0.0) Arrays.fill(A, value); } /** * Constructor. * @param value the array of matrix values arranged in row major format */ public IntArray2D(int rows, int cols, int[] value) { this.nrows = rows; this.ncols = cols; this.A = value; } public int nrows() { return nrows; } public int ncols() { return ncols; } /** Returns A(i, j). Useful in Scala. */ public int apply(int i, int j) { return A[i*ncols + j]; } /** Returns A(i, j). */ public int get(int i, int j) { return A[i*ncols + j]; } /** Sets A(i, j). */ public int set(int i, int j, int x) { return A[i*ncols + j] = x; } public int add(int i, int j, int x) { return A[i*ncols + j] += x; } public int sub(int i, int j, int x) { return A[i*ncols + j] -= x; } public int mul(int i, int j, int x) { return A[i*ncols + j] *= x; } public int div(int i, int j, int x) { return A[i*ncols + j] /= x; } public IntArray2D add(IntArray2D b) { if (nrows() != b.nrows() || ncols() != b.ncols()) { throw new IllegalArgumentException("Matrix is not of same size."); } for (int i = 0; i < A.length; i++) { A[i] += b.A[i]; } return this; } public IntArray2D sub(IntArray2D b) { if (nrows() != b.nrows() || ncols() != b.ncols()) { throw new IllegalArgumentException("Matrix is not of same size."); } for (int i = 0; i < A.length; i++) { A[i] -= b.A[i]; } return this; } public IntArray2D mul(IntArray2D b) { if (nrows() != b.nrows() || ncols() != b.ncols()) { throw new IllegalArgumentException("Matrix is not of same size."); } for (int i = 0; i < A.length; i++) { A[i] *= b.A[i]; } return this; } public IntArray2D div(IntArray2D b) { if (nrows() != b.nrows() || ncols() != b.ncols()) { throw new IllegalArgumentException("Matrix is not of same size."); } for (int i = 0; i < A.length; i++) { A[i] /= b.A[i]; } return this; } public IntArray2D add(int x) { for (int i = 0; i < A.length; i++) { A[i] += x; } return this; } public IntArray2D sub(int x) { for (int i = 0; i < A.length; i++) { A[i] -= x; } return this; } public IntArray2D mul(int x) { for (int i = 0; i < A.length; i++) { A[i] *= x; } return this; } public IntArray2D div(int x) { for (int i = 0; i < A.length; i++) { A[i] /= x; } return this; } public long sum() { long s = 0; for (int i = 0; i < A.length; i++) { s += A[i]; } return s; } @Override public String toString() { return toString(false); } /** * Returns the string representation of matrix. * @param full Print the full matrix if true. Otherwise, * print only top left 7 x 7 submatrix. */ public String toString(boolean full) { return full ? toString(nrows(), ncols()) : toString(7, 7); } /** * Returns the string representation of matrix. * @param m the number of rows to print. * @param n the number of columns to print. */ public String toString(int m, int n) { StringBuilder sb = new StringBuilder(); m = Math.min(m, nrows()); n = Math.min(n, ncols()); String newline = n < ncols() ? "...\n" : "\n"; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { sb.append(String.format("%d ", get(i, j))); } sb.append(newline); } if (m < nrows()) { sb.append(" ...\n"); } return sb.toString(); } }
download show line numbers debug dex old transpilations
Travelled to 6 computer(s): bhatertpkbcr, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tvejysmllsmz, vouqrxazstgt
No comments. add comment
Snippet ID: | #1026089 |
Snippet name: | IntArray2D [from smile] |
Eternal ID of this version: | #1026089/2 |
Text MD5: | a87701d367d7063ca728200298cab77f |
Transpilation MD5: | ba51f90ea4092c6b4ef9d14a3ad57962 |
Author: | stefan |
Category: | javax |
Type: | JavaX fragment (include) |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2019-11-27 02:38:18 |
Source code size: | 5598 bytes / 226 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 251 / 631 |
Version history: | 1 change(s) |
Referenced in: | #1026139 - IIntArray2D #1034167 - Standard Classes + Interfaces (LIVE, continuation of #1003674) |