Как извлечь определенные строки из матрицы 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]
]