以下の内容はhttps://a1026302.hatenablog.com/entry/2025/11/07/170605より取得しました。


【perl】PDL (Perl Data Language) を使ってみる

PDL (Perl Data Language) を使ってみたので、その時のメモをここに残します。

PDL とは

PDL (Perl Data Language) は、Perl で NumPy のような高速な数値演算・ベクトル処理を可能にする拡張ライブラリです。
Perl の標準的なスカラー・配列・ハッシュでは、数値計算や大規模データの処理は遅くなります。
PDL は、C言語レベルの数値配列(ndarray的なもの)を扱えるようにし、ベクトル化された高速計算を提供します。

特徴

機能 説明
多次元配列 NumPyの`ndarray`のように、2次元・3次元以上のデータを扱える
ベクトル演算 ループを使わずに配列演算を実行可能(Cレベルで高速)
線形代数・統計 行列計算、固有値、相関、フーリエ変換などの関数が豊富
可視化 `PDL::Graphics::Gnuplot` や `PDL::Graphics::Prima` でプロット可能
CやFortranとの連携 高速化のためにC拡張を簡単に組み込める
拡張パッケージが豊富 画像処理、天文学、物理など科学用途の拡張がある

インストール方法

CPAN からインストールできます。

cpan install PDL

or

cpanm PDL

サンプルスクリプト

  • PDL配列(piddles)の作成
  • 基本的な算術演算
  • 統計関数(平均、合計、最小値、最大値)
  • 行列演算
  • 乱数生成
  • 配列スライシング
  • 数学関数(sin, cos等)
  • 範囲とシーケンスの生成
#!/usr/bin/env perl
use strict;
use warnings;
use PDL;
use PDL::NiceSlice;
use PDL::Constants qw(PI);

print "=== PDL (Perl Data Language) Sample Script ===\n\n";

# 1. Creating PDL arrays (piddles)
print "1. Creating PDL arrays (piddles)\n";
my $x = pdl [1, 2, 3, 4, 5];
print "Vector x: $x\n";

my $matrix = pdl [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
print "Matrix:\n$matrix\n";

# 2. Basic arithmetic operations
print "\n2. Basic arithmetic operations\n";
my $y = pdl [2, 4, 6, 8, 10];
print "y: $y\n";
print "x + y: ", $x + $y, "\n";
print "x * y: ", $x * $y, "\n";
print "x ** 2: ", $x ** 2, "\n";

# 3. Statistical functions
print "\n3. Statistical functions\n";
my $data = pdl [1.2, 3.4, 5.6, 7.8, 9.0, 2.3, 4.5];
print "Data: $data\n";
print "Mean: ", $data->avg(), "\n";
print "Sum: ", $data->sum(), "\n";
print "Min: ", $data->min(), "\n";
print "Max: ", $data->max(), "\n";

# 4. Matrix operations
print "\n4. Matrix operations\n";
my $a = pdl [[1, 2], [3, 4]];
my $b = pdl [[5, 6], [7, 8]];
print "Matrix A:\n$a\n";
print "Matrix B:\n$b\n";
print "A x B (matrix multiplication):\n", $a x $b, "\n";

# 5. Random number generation
print "\n5. Random number generation\n";
my $random = random(5);
print "Random vector (5 elements): $random\n";

# 6. Array slicing
print "\n6. Array slicing\n";
my $number_sequence = sequence(10);  # Creates [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print "Full array: $number_sequence\n";
print "First 5 elements: ", $number_sequence(0:4), "\n";
print "Last 3 elements: ", $number_sequence(-3:-1), "\n";

# 7. Mathematical functions
print "\n7. Mathematical functions\n";
my $angles = pdl [0, PI/4, PI/2, PI];
print "Angles: $angles\n";
print "sin(angles): ", sin($angles), "\n";
print "cos(angles): ", cos($angles), "\n";

# 8. Creating ranges and sequences
print "\n8. Creating ranges and sequences\n";
my $number_range = sequence(10);
print "Sequence 0-9: $number_range\n";
my $zeros = zeros(5);
print "Zeros (5): $zeros\n";
my $ones = ones(3, 3);
print "Ones (3x3):\n$ones\n";

print "\n=== Sample script completed successfully! ===\n";

参考




以上の内容はhttps://a1026302.hatenablog.com/entry/2025/11/07/170605より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14