如何从 PDL 矩阵中提取特定行?
How do I extract specific rows from a PDL matrix?
假设我有:
$a = [
[1, 0, 1]
[0, 1, 0]
[0, 1, 1]
]
我想提取 $row[2] == 1
所在的所有行。我得到的 piddle 看起来像:
$b = [
[1, 0, 1]
[0, 1, 1]
]
PDL 可以吗?
我是 PDL
的新手,但您似乎可以使用 which
结果作为掩码。
您需要先 transpose
原始变量,然后 transpose
使用 slice
后返回。
pdl> $a = pdl [[1, 0, 1], [0, 1, 0], [0, 1, 1]]
pdl> p which($a(2) == 1)
[0 2]
pdl> p $a->transpose
[
[1 0 0]
[0 1 1]
[1 0 1]
]
pdl> p $a->transpose->slice(which($a(2) == 1))->transpose
[
[1 0 1]
[0 1 1]
]
您需要使用 which
生成矩阵的索引列表,其中第三列的值为 1
which($aa->index(2) == 1)
并将其传递给 dice_axis
,这将 select 具有给定索引的行。轴 0 是列,轴 1 是行,所以代码如下所示
use strict;
use warnings 'all';
use PDL;
my $aa = pdl <<__END_PDL__;
[
[1, 0, 1]
[0, 1, 0]
[0, 1, 1]
]
__END_PDL__
my $result = $aa->dice_axis(1, which($aa->index(2) == 1));
print $result;
输出
[
[1 0 1]
[0 1 1]
]
假设我有:
$a = [
[1, 0, 1]
[0, 1, 0]
[0, 1, 1]
]
我想提取 $row[2] == 1
所在的所有行。我得到的 piddle 看起来像:
$b = [
[1, 0, 1]
[0, 1, 1]
]
PDL 可以吗?
我是 PDL
的新手,但您似乎可以使用 which
结果作为掩码。
您需要先 transpose
原始变量,然后 transpose
使用 slice
后返回。
pdl> $a = pdl [[1, 0, 1], [0, 1, 0], [0, 1, 1]]
pdl> p which($a(2) == 1)
[0 2]
pdl> p $a->transpose
[
[1 0 0]
[0 1 1]
[1 0 1]
]
pdl> p $a->transpose->slice(which($a(2) == 1))->transpose
[
[1 0 1]
[0 1 1]
]
您需要使用 which
生成矩阵的索引列表,其中第三列的值为 1
which($aa->index(2) == 1)
并将其传递给 dice_axis
,这将 select 具有给定索引的行。轴 0 是列,轴 1 是行,所以代码如下所示
use strict;
use warnings 'all';
use PDL;
my $aa = pdl <<__END_PDL__;
[
[1, 0, 1]
[0, 1, 0]
[0, 1, 1]
]
__END_PDL__
my $result = $aa->dice_axis(1, which($aa->index(2) == 1));
print $result;
输出
[
[1 0 1]
[0 1 1]
]