@@ -50,13 +50,17 @@ csr_to_dense_matrix(int m, int n, const T& w, const std::vector<int>& v,
5050 Matrix<value_type_t <T>, Dynamic, Dynamic> result (m, n);
5151 result.setZero ();
5252 for (int row = 0 ; row < m; ++row) {
53- int row_end_in_w = (u[row] - stan::error_index::value) + csr_u_to_z (u, row);
54- check_range (" csr_to_dense_matrix" , " w" , w.size (), row_end_in_w);
55- for (int nze = u[row] - stan::error_index::value; nze < row_end_in_w;
56- ++nze) {
57- // row is row index, v[nze] is column index. w[nze] is entry value.
58- check_range (" csr_to_dense_matrix" , " j" , n, v[nze]);
59- result (row, v[nze] - stan::error_index::value) = w_ref.coeff (nze);
53+ int row_nnz = csr_u_to_z (u, row);
54+
55+ if (row_nnz > 0 ) {
56+ int row_end_in_w = (u[row] - stan::error_index::value) + row_nnz;
57+ check_range (" csr_to_dense_matrix" , " w" , w.size (), row_end_in_w);
58+ for (int nze = u[row] - stan::error_index::value; nze < row_end_in_w;
59+ ++nze) {
60+ // row is row index, v[nze] is column index. w[nze] is entry value.
61+ check_range (" csr_to_dense_matrix" , " j" , n, v[nze]);
62+ result (row, v[nze] - stan::error_index::value) = w_ref.coeff (nze);
63+ }
6064 }
6165 }
6266 return result;
0 commit comments