3

假设我有:

$a = [
      [1, 0, 1]
      [0, 1, 0]
      [0, 1, 1]
     ]

我想提取所有行$row[2] == 1。我得到的 piddle 看起来像:

$b = [
      [1, 0, 1]
      [0, 1, 1]
     ]

PDL可以做到这一点吗?

4

2 回答 2

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]
]
于 2018-08-16T01:19:31.027 回答
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]
]
于 2018-08-15T23:34:40.450 回答