2D matrix operation (subtraction)
Ali Çehreli
acehreli at yahoo.com
Fri Feb 21 11:53:02 UTC 2020
On 2/21/20 12:51 AM, Andre Pany wrote:
> Hi,
>
> I have a 2D double array and I want to subtract from the first column a
> value,
> is this possible with matrix operation in D?
>
> ```
> void main()
> {
> double[][] data = [[0.0, 1.4], [1.0, 5.2], [2.0, 0.8]];
>
> // subtract -2.0 from the first column for every value
>
> // Expected output
> // data = [[-2.0, 1.4], [-1.0, 5.2], [0.0, 0.8]];
>
> }
> ```
>
> Kind regards
> André
>
>
I don't have experience with it but mir's ndslice is designed for this:
https://github.com/libmir/mir-algorithm
Although it feels like something similar is probably already in Phobos,
I've come up with the following solution just now for fun:
import std.stdio;
import std.algorithm;
import std.range;
// At least something similar to this exists in Phobos?
struct ElementReference(R) {
ElementType!(ElementType!R) * p;
ref reference() {
return *p;
}
alias reference this;
}
struct Column(R) {
R range;
size_t n;
auto empty() {
return range.empty;
}
auto front() {
return ElementReference!R(&(range.front[n]));
}
auto popFront() {
return range.popFront();
}
}
auto byColumn(R)(R range, size_t n) {
return Column!R(range, n);
}
void main() {
double[][] data = [[0.0, 1.4], [1.0, 5.2], [2.0, 0.8]];
data.byColumn(0).each!(a => a -= 2.0);
writeln(data);
}
Ali
More information about the Digitalmars-d-learn
mailing list