From Jason Turner

[linalg.conjtransposed]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmpqxh6k1dq/{from.md → to.md} +49 -0
tmp/tmpqxh6k1dq/{from.md → to.md} RENAMED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ### Conjugate transpose in-place transform <a id="linalg.conjtransposed">[[linalg.conjtransposed]]</a>
2
+
3
+ The `conjugate_transposed` function returns a conjugate transpose view
4
+ of an object. This combines the effects of `transposed` and
5
+ `conjugated`.
6
+
7
+ ``` cpp
8
+ template<class ElementType, class Extents, class Layout, class Accessor>
9
+ constexpr auto conjugate_transposed(mdspan<ElementType, Extents, Layout, Accessor> a);
10
+ ```
11
+
12
+ *Effects:* Equivalent to: `return conjugated(transposed(a));`
13
+
14
+ [*Example 1*:
15
+
16
+ ``` cpp
17
+ void test_conjugate_transposed(mdspan<complex<double>, extents<size_t, 3, 4>> a) {
18
+ const auto num_rows = a.extent(0);
19
+ const auto num_cols = a.extent(1);
20
+
21
+ auto a_ct = conjugate_transposed(a);
22
+ assert(num_rows == a_ct.extent(1));
23
+ assert(num_cols == a_ct.extent(0));
24
+ assert(a.stride(0) == a_ct.stride(1));
25
+ assert(a.stride(1) == a_ct.stride(0));
26
+
27
+ for (size_t row = 0; row < num_rows; ++row) {
28
+ for (size_t col = 0; col < num_rows; ++col) {
29
+ assert(a[row, col] == conj(a_ct[col, row]));
30
+ }
31
+ }
32
+
33
+ auto a_ct_ct = conjugate_transposed(a_ct);
34
+ assert(num_rows == a_ct_ct.extent(0));
35
+ assert(num_cols == a_ct_ct.extent(1));
36
+ assert(a.stride(0) == a_ct_ct.stride(0));
37
+ assert(a.stride(1) == a_ct_ct.stride(1));
38
+
39
+ for (size_t row = 0; row < num_rows; ++row) {
40
+ for (size_t col = 0; col < num_rows; ++col) {
41
+ assert(a[row, col] == a_ct_ct[row, col]);
42
+ assert(conj(a_ct[col, row]) == a_ct_ct[row, col]);
43
+ }
44
+ }
45
+ }
46
+ ```
47
+
48
+ — *end example*]
49
+