gpt4 book ai didi

perl - 在 Perl 的 PDL::Complex 中转置

转载 作者:行者123 更新时间:2023-12-02 02:39:44 26 4
gpt4 key购买 nike

我正在考虑对复杂矩阵运算使用 Perl 数据语言 (PDL 2.19.0) 的复杂扩展,但像转置这样简单的运算并不能像我预期的那样工作。

use strict;
use warnings;

use PDL;
use PDL::Complex;

my $m = cplx pdl [i, 1], [-1, -i];

printf "m=%s\n", $m;
my $mt = $m->transpose;
printf "m=%s\n", $m;
printf "mt=%s\n", $mt;
my $mx = $m->xchg(1,2);
printf "m=%s\n", $m;
printf "mx=%s\n", $mx;

在我看来,$m->transpose 等于 $m。另一个据说很简单的操作让我很烦恼:
printf "m[0,0]=%s\n", $m->at(0,0);

不起作用,只有
printf "m[0,0,0]=%s\n", $m->at(0,0,0);

做。我是否以错误的方式使用 API?

最佳答案

基本的 piddle 操作与您预期的不同,因为看起来复杂的 piddles 是使用第 0 维来存储实数和虚数对的。如果您检查 dims,您可以看到这一点或 real :

pdl> $m = cplx pdl [i, 1], [-1, -i];

pdl> p $m->dims
2 2 2
pdl> p $m->real

[
[
[0 1]
[1 0]
]
[
[-1 0]
[ 0 -1]
]
]

因此,您可以使用 xchg而不是 transpose转置“二维”复杂 piddle 的正确维度:
pdl> p $m

[
[ 0 +1i 1 +0i]
[-1 +0i 0 -1i]
]

pdl> p $m->xchg(1, 2)

[
[ 0 +1i -1 +0i]
[ 1 +0i 0 -1i]
]


对于 at,您可以分别获取实部/虚部并将它们组合起来:
pdl> p cplx pdl $m->at(0,0,0), $m->at(1,0,0)
0 +1i

或切片对:
pdl> p $m->slice('', '(0)', '(0)')
0 +1i

关于perl - 在 Perl 的 PDL::Complex 中转置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60515901/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com