On Thursday, 27 December 2018 at 21:17:48 UTC, David wrote:
On Wednesday, 26 December 2018 at 18:59:25 UTC, 9il wrote:
On Saturday, 15 December 2018 at 19:04:37 UTC, David wrote:
Hi
I am wondering if it is possible to assign a vector to a row
of a matrix?
============ main.d ==========
import mir.ndslice;
void main() {
auto matrix = slice!double(3, 4);
matrix[] = 0;
matrix.diagonal[] = 1;
auto row = matrix[0];
row[3] = 4;
assert(matrix[0, 3] == 4);
// assign it to rows of a matrix?
auto vector = sliced!(double)([10, 11, 12, 13]);
// ??? Here I would like to assign the vector to the last
(but it is not working)
// matrix[2] = vector;
}
============
So I am wondering what the correct way is to do such an
assignment without looping?
matrix[2][] = vector;
Or
matrix[2,0..$] = vector;
great many thanks!! Is there any logic why getting a row works
by
auto row = matrix[0];
but assigning to a row works (only) by the two variant you
posted?
This case gets a slice of a row, it does not copy the data. So
row[i] is matrix[0, i], the same number in the RAM.
auto row = matrix[0];
This case gets a slice of a row, it does not copy the data.
If you wish to copy data you need to use a slice on the right
side:
row[] = matrix[0];
or
auto row = matrix[0].slice; // 'slice' allocates new data
For columns:
col[] = matrix[0 .. $, 0];