Thread overview |
---|
December 15, 2018 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? |
December 26, 2018 Re: mir.ndslice: assign a vector to a matrix row | ||||
---|---|---|---|---|
| ||||
Posted in reply to David | 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;
|
December 27, 2018 Re: mir.ndslice: assign a vector to a matrix row | ||||
---|---|---|---|---|
| ||||
Posted in reply to 9il | 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?
|
December 28, 2018 Re: mir.ndslice: assign a vector to a matrix row | ||||
---|---|---|---|---|
| ||||
Posted in reply to David | 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];
|
December 28, 2018 Re: mir.ndslice: assign a vector to a matrix row | ||||
---|---|---|---|---|
| ||||
Posted in reply to 9il | 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
|
December 28, 2018 Re: mir.ndslice: assign a vector to a matrix row | ||||
---|---|---|---|---|
| ||||
Posted in reply to 9il | 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!!
|
Copyright © 1999-2021 by the D Language Foundation