Re: mir.ndslice: assign a vector to a matrix row

2018-12-28 Thread David via Digitalmars-d-learn

On Friday, 28 December 2018 at 08:11:37 UTC, 9il wrote:

On Friday, 28 December 2018 at 08:09:09 UTC, 9il wrote:

On Thursday, 27 December 2018 at 21:17:48 UTC, David wrote:

On Wednesday, 26 December 2018 at 18:59:25 UTC, 9il 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?


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:




EDIT: a slice on the LEFT side


Many thanks for this background!!


Re: mir.ndslice: assign a vector to a matrix row

2018-12-28 Thread 9il via Digitalmars-d-learn

On Friday, 28 December 2018 at 08:09:09 UTC, 9il wrote:

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:

[...]


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:




EDIT: a slice on the LEFT side


Re: mir.ndslice: assign a vector to a matrix row

2018-12-28 Thread 9il via Digitalmars-d-learn

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];



Re: mir.ndslice: assign a vector to a matrix row

2018-12-27 Thread David via Digitalmars-d-learn

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?




Re: mir.ndslice: assign a vector to a matrix row

2018-12-26 Thread 9il via Digitalmars-d-learn

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;


mir.ndslice: assign a vector to a matrix row

2018-12-15 Thread David via Digitalmars-d-learn

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?