mir.ndslice: assign a vector to a matrix row

9il ilyayaroshenko at gmail.com
Fri Dec 28 08:09:09 UTC 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:
>> 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];



More information about the Digitalmars-d-learn mailing list