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