Warning: session_start(): open(/var/lib/php/sessions/sess_lkstkqfai9qc777efuq6qha9lf, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
/*******************************************************************************
* 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 .
*******************************************************************************/
sclass IntArray2D {
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();
}
}