假设我有
$a = [
[1, 0, 1]
[0, 1, 0]
[0, 1, 1]
]
,我想提取$row[2] == 1
处的所有行。我产生的困惑看起来像:
$b = [
[1, 0, 1]
[0, 1, 1]
]
PDL是否可能?
答案 0 :(得分:3)
您需要使用which
来生成矩阵索引的列表,该索引在第三列中的值为1
which($aa->index(2) == 1)
,然后将其传递给dice_axis
,它将选择具有给定索引的行。轴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]
]
答案 1 :(得分:1)
我是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]
]