Staram się zrobić grep jak na matrycy PDL lub macierz wektora:

my @toto;
push(@toto, pdl(1,2,3));
push(@toto, pdl(4,5,6));
my $titi=pdl(1,2,3);
print("OK") if (grep { $_ eq $titi} @toto);

Ja też próbowałem

my @toto;
push(@toto, pdl(1,2,3));
push(@toto, pdl(4,5,6));
my $titi=pdl(1,2,3);
print("OK") if (grep { $_ eq $titi} PDL::Matrix->pdl(\@toto));

Brak działa.

Każda pomoc proszę

3
Alexglvr 27 luty 2019, 15:30

2 odpowiedzi

Najlepsza odpowiedź

Zastrzeżenie: Nie wiem nic o PDL. Przeczytałem źródło, aby to zrozumieć.

Jest funkcja PDL::all(), że można użyć w połączeniu z przeciążeniowym operatorem porównawczym ==.

use PDL;
my $foo = pdl(1,2,3);
my $bar = pdl(4,5,6);
my $qrr = pdl(1,2,3);

print "OK 1" if PDL::all( $foo == $bar );
print "OK 2" if PDL::all( $foo == $qrr );

Nadal szukam dokumentacji.

3
simbabque 27 luty 2019, 15:00

Możesz użyć eq_pdl z Test::PDL:

use PDL;
use Test::PDL qw( eq_pdl );
my @toto;
push(@toto, pdl(1,2,3));
push(@toto, pdl(4,5,6));
my $titi = pdl(4,5,6);
print("OK\n") if (grep { eq_pdl( $_, $titi) } @toto);

Wyjście :

OK
0
Håkon Hægland 1 marzec 2019, 09:47