Ejemplo n.º 1
0
  /** Compute y <- alpha*op(a)*x + beta * y (general matrix vector multiplication) */
  public static FloatMatrix gemv(
      float alpha, FloatMatrix a, FloatMatrix x, float beta, FloatMatrix y) {
    if (false) {
      NativeBlas.sgemv(
          'N', a.rows, a.columns, alpha, a.data, 0, a.rows, x.data, 0, 1, beta, y.data, 0, 1);
    } else {
      if (beta == 0.0f) {
        for (int i = 0; i < y.length; i++) y.data[i] = 0.0f;

        for (int j = 0; j < a.columns; j++) {
          float xj = x.get(j);
          if (xj != 0.0f) {
            for (int i = 0; i < a.rows; i++) y.data[i] += a.get(i, j) * xj;
          }
        }
      } else {
        for (int j = 0; j < a.columns; j++) {
          float byj = beta * y.data[j];
          float xj = x.get(j);
          for (int i = 0; i < a.rows; i++) y.data[j] = a.get(i, j) * xj + byj;
        }
      }
    }
    return y;
  }