Как извлечь определенные строки из матрицы PDL?

Предположим, у меня есть:

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

и я хочу извлечь все строки, где $row[2] == 1, Моя полученная пиддл будет выглядеть так:

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

Это возможно с PDL?

2 ответа

Решение

Вам нужно использовать 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]
]

Я новичок в 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]
]
Другие вопросы по тегам