簡體   English   中英

如何從PDL矩陣中提取特定行?

[英]How do I extract specific rows from a PDL matrix?

假設我有:

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

我想提取$row[2] == 1所有行。 我的結果如下:

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

這可能與PDL有關嗎?

您需要使用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原始變量,然后在使用slice后將其transpose回來。

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]
]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM