## digitalmars.D.learn - mir.ndslice: assign a vector to a matrix row

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?

Dec 15 2018

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;

Dec 26 2018

On Wednesday, 26 December 2018 at 18:59:25 UTC, 9il wrote:On Saturday, 15 December 2018 at 19:04:37 UTC, David wrote: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?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;

Dec 27 2018

On Thursday, 27 December 2018 at 21:17:48 UTC, David wrote:On Wednesday, 26 December 2018 at 18:59:25 UTC, 9il wrote: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];On Saturday, 15 December 2018 at 19:04:37 UTC, David wrote: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?

Dec 28 2018

On Friday, 28 December 2018 at 08:09:09 UTC, 9il wrote:On Thursday, 27 December 2018 at 21:17:48 UTC, David wrote:EDIT: a slice on the LEFT sideOn Wednesday, 26 December 2018 at 18:59:25 UTC, 9il wrote: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:On Saturday, 15 December 2018 at 19:04:37 UTC, David wrote: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?[...]matrix[2][] = vector; Or matrix[2,0..$] = vector;

Dec 28 2018

On Friday, 28 December 2018 at 08:11:37 UTC, 9il wrote:On Friday, 28 December 2018 at 08:09:09 UTC, 9il wrote:Many thanks for this background!!On Thursday, 27 December 2018 at 21:17:48 UTC, David wrote:EDIT: a slice on the LEFT sideOn Wednesday, 26 December 2018 at 18:59:25 UTC, 9il wrote: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:[...]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?

Dec 28 2018