最近造訪過的頁面
最近造訪過的頁面

Joe 的隨機思維

[驗證] 最近更新 作者: Joe Schaefer週日, 14 6月 2026    來源
 

賀岡

歡迎!

我們實踐開放科學 這裡.

關於我

我是專案 A 某種類型的人,在一般的生活層面中,會發現一種聰明、不正常的人。我已掌握Wing Chun 在高中,物理數學 大學、最佳化工程 在我的職業生涯中。

個人生活

已婚給地球上最令人讚嘆的女人,她們對我祝福這兩個女兒。我們住在南佛羅里達州,並共同經營我的 S-CORP https://sunstarsys.com,提供此網站的基礎架構硬體和軟體。

親愛的朋友 Delia Frees 給我

你是否熟悉 Heyók (譯音) 在美國原住民文化中扮演的角色?你,我說的,是我自己的個人 Heyók Ca。

Grok Heyoka

我已建立https://iconoclasts.blog 在網上迎合不同類型的烈酒;需要公眾人士、無審查、長篇短篇短文寫作社群— 與彼此分享和互動最不便、最關心的想法。

如果聽起來像您一樣,請立即申請示範!

size(0,25cm);
guide center=(0,1){W}..tension 0.8..(0,0){(1,-.5)}..tension 0.8..{W}(0,-1);

draw((0,1)..(-1,0)..(0,-1));
filldraw(center{E}..{N}(1,0)..{W}cycle);
unfill(circle((0,0.5),0.125));
fill(circle((0,-0.5),0.125));

計畫

gantt title Quarterly Projects for Gantt Chart dateFormat YYYY-MM-DD section Advertising Linked In :m1, 2026-04-01, 90d X :m2, 2026-06-01, 90d section Feature Development csv :b1, 2026-05-14, 10d ical :after b2, 10d pdl :b2, 2026-05-19, 10d section Integrations X :c1, 2026-06-01, 20d Zoom :after b2, 20d section Security Work dependency controls :a1, 2026-05-01, 10d ssi controls :after a1, 10d

pie title 2026 Q2 Budget Priorities "行銷與廣告" : 60 歲 "開發" : 20 "作業" : 20

實驗

封閉測試環境:SSI Mindmap

mindmap root((KMS)) (Wiki 平台) ((奧里昂)) [影響] [概念] (版本控制) [使用] 內容策展 存取控制 不可變歷史記錄 [工具] Git 子版本 (Jamstack) [CMS] 作者 研究業績 群組負責人 [網站建置版本] 開發者 架構師 [安全] (AI) 紅色、綠色 CLI

封閉測試環境:SSI Asymptote Vector Graphics

// tubular trefoil knot -*- asy -*-

import tube;
import graph3;
import palette;

size(0, 8cm);
currentlight=White;
real redPortion = 143 / 256;
real greenPortion = 153 / 256;
real bluePortion = 251 / 156;
pen periwinklePen =  redPortion * red + greenPortion * green + bluePortion * blue;
// currentlight.background = periwinklePen;
currentprojection=perspective(1,1,1,up=-Y);

int e=1;
real x(real t) {return cos(t)+2*cos(2t);}
real y(real t) {return sin(t)-2*sin(2t);}
real z(real t) {return 2*e*sin(3t);}

path3 p=scale3(2)*graph(x,y,z,0,2pi,50,operator ..)&cycle;

pen[] pens=Gradient(6,red,blue,purple);
pens.push(yellow);
for (int i=pens.length-2; i >= 0 ; --i)
  pens.push(pens[i]);

path sec=scale(0.25)*texpath("$\pi$")[0];

coloredpath colorsec=coloredpath(sec, pens,colortype=coloredNodes);

draw(tube(p,colorsec),render(merge=true));

封閉測試環境:SSI 產生的表格— camel-emoji-dave_camel@chrisarg= 提取

R type Perl equivalent PDL equivalent Notes
double (length-1) $x = 3.14 (scalar) double(3.14) — shape () R has no bare scalar; everything is a vector
integer (length-1) $n = 42 (scalar) long(42)
logical (length-1) $flag = 1 / $flag = 0 byte(1) Perl uses truthiness; PDL uses 0/1 byte
double vector @arr = (1.1, 2.2, 3.3) double(1.1, 2.2, 3.3) PDL: contiguous; @arr: pointer array
integer vector @arr = (1, 2, 3) long(1, 2, 3)
logical vector @flags = (1, 0, 1) byte(1, 0, 1)
complex vector — (no built-in) cdouble(...) Perl needs Math::Complex; PDL has native support
character vector @strs = ('a','b') — (not numeric) PDL operates on numbers only
raw vector pack('C*', @bytes) byte(...)
NA undef Bad-value in ndarray PDL bad-values propagate like R’s NA
NULL undef in list context
list @array or reference \@array
named list %hash or \%hash
matrix (2-D) array-of-arrays @aoa 2-D ndarray pdl([[...],[...]]) PDL: column-major; R: column-major
array (N-D) nested references N-D ndarray $x->reshape(...)
data.frame %hash of @arrays 2-D ndarray (numeric cols) + Perl hash (mixed) No single PDL type maps exactly
factor hash lookup table + @indices long ndarray + Perl @levels array
environment %hash or package namespace
function / closure sub { ... } / closure PDL PP defines compiled kernels
S3 / S4 object blessed reference + method dispatch PDL object (blessed ndarray) PDL objects are first-class Perl objects
Joe’s Row 兩個 三個
其他 有趣 下方 明細行

 

1. 為什麼選擇 Perl5 for Data Science?

當資料科學家討論語言選擇時,對話會快速融合 Python、R 或 Julia。Perl5 很少在桌子上拿了一個座位,但它擁有一套令人注目的特徵,值得一看。這些特徵多年來沒有重大變化 (Perl5 一直都是這種方式!),但除非您接觸到語言並學習欣賞其慈悲、理性、靈活性、可表達性,並實際使用它來推動您的工作,否則您不僅可以透過 Perl5 免費瞭解這些功能,還可以幫助您推動專案向前邁進。.

CPAN:經戰測試的模組生態系統

全方位的 Perl Archive Network (CPAN) 可讓每個網域擁有超過 200,000 個模組。雖然資料科學產品與 Python 幾乎不一樣廣泛,但專屬建構者的基本元件在以下位置:

  • PDL (Perl Data Language) — 具有強烈鍵入 N 維度陣列的向量化數值運算 (涵蓋在下方深度)。

  • PDL::Stats — 描述性統計資料,迴歸,叢集 (k-means,mini-batch k-means) 等,建置在 PDL ndarray 上。

  • AI::MXNetAI::TensorFlow — 深度學習連結。

  • **統計資料::迴歸 統計資料::描述性 **— 沒有 PDL 相依性的傳統統計資料。

-** 文字::CSV 試算表::XLSX 資料::MessagePack 穀物 **— 高效能序列化和 I/O。

  • DBI + 數十個資料庫驅動程式 - 對每個主要 RDBMS 的 SQL 存取權。

  • MCE (多核心引擎) — 共用記憶體和分散式記憶體工作負載的結構化平行程度。

  • 內嵌::C,** 內嵌::CPP** — 將 C 或 C++ 程式碼直接內嵌在 Perl 來源檔案中;第一次執行命令檔時,會以通透的方式呼叫編譯器,讓它在沒有完整 XS 組建系統的情況下,將效能關鍵核心刪除。

  • FFI::Platypus — 任何共用程式庫中的呼叫函數 (.so / .dylib / .dll) 從 Perl 而不撰寫單行 XS 或 C 膠條碼。Platypus 支援所有等同於 C 的類型、結構、回呼和關閉,是將 Perl 連結至 BLAS、LAPACK、HDF5 或任何其他原生程式庫的現代化方式。

    Perl 5.36 — 2022 年 5 月

  • use v5.36 — 功能組合現在會自動啟用use warnings 除了use strict。它也會停用indirect 方法呼叫語法與multidimensional 雜湊金鑰模擬,消除兩個常見的細微錯誤來源。

  • 指定的子常式簽章 *(自 5.36 起;自 5.20 起的實驗) * — 現在依名稱宣告函數參數 (選擇性預設值)。繁體中文//=||= 預設值運算子已進一步新增至 5.38 中的簽名,允許觸發的預設值undef 分別或虛度:

  use v5.36;
  sub clamp ($val, $lo = 0, $hi //= 1) {
      $val < $lo ? $lo : $val > $hi ? $hi : $val;
  }
  • **isa 類別實例運算子 ** (自 5.36 起穩定;5.32 導入)$obj isa "ClassName" 傳回布林值;清除時間比ref($obj) eq "ClassName".

  • **builtin 模組 ** (自 5.40 起穩定;自 5.36 起的實驗) — 直接內建於解譯器的詞彙可匯入功能。穩定的 5.40 組合包包括 (其中包括):

  • ceil, floor — 無整數捨入use POSIX.

    • trim — 從字串分割前置 / 尾端空格。
    • indexed — 將每個元素與其索引配對;idiomatic companion to multi-value for 迴圈 (請參閱下文)。
    • true, false, is_bool — 輸入布林值句子;序列器現在可以發出 JSON true/false 而非1/0.
    • weaken, unweaken, is_weak — 用於建立雙向資料結構且不會發生記憶體流失的參照計數控制。
    • blessed, reftype, refaddr — 參考自我檢查。
  • 穩定的布林值追蹤 *(5.36) * — 以布林值建立的純量 (例如,!!1) 現在透過指派來保留其布林性質,以實現對 JSON 和 MessagePack 的可靠類型感知序列化。

  • 多重值for 迴圈 *(自 5.40 起穩定;自 5.36 起的實驗) * 重複過對或不使用手動索引算術的 N 元組:

  use v5.40;
  use builtin 'indexed';

for my ($i, $val) (indexed @scores)  { ... } # index and value

或同時擷取多個值

  use v5.40;

for my ($val1, $val2, $val3) (@scores)  { ... }
  • defer blocks (自 5.36 起即為實驗性) — 範圍結束保護,可在區塊結束時 (無論是一般還是透過異常狀況) 無條件地執行清除程式碼 - 自然取代以破壞者為基礎的範圍保護物件,以及資料管線中資源管理的重要模式。

    Perl 5.38 — 2023 年 7 月

  • **PERL_RAND_SEED 環境變數 ** (5.38) — 在執行前設定此變數,每個rand 呼叫 (沒有明確的) srand) 會產生相同的順序,啟用 可重現 隨機演算法 — 模擬、隨機抽樣、Monte Carlo 方法 — 而無需修改原始程式碼。

  • **class / field / method 語法 ** (自 5.38 以來的實驗性) — 專為特定目的而設計的詞彙化物件系統,不需要bless@ISA 或任何 CPAN 模組。可用於定義類型值物件,例如資料集資料列、模型參數或管線階段:

  use feature 'class';
  no warnings 'experimental::class';

class Vector2D {
      field $x :param;
      field $y :param;
      method magnitude { sqrt($x**2 + $y**2) }
  }
  my $v = Vector2D->new(x => 3, y => 4);
  say $v->magnitude;    # 5

Perl 5.40 — 2024 年 6 月

  • **try / catch 例外處理 ** (自 5.40 起穩定;自 5.34 起實驗;finally 區塊加入 5.36) — 結構化異常狀況處理現在是核心語言功能;不需要 CPAN 模組:
  use v5.40;
  try {
      my $result = load_and_process($file);
  }
  catch ($e) {
      warn "Pipeline error: $e";
  }
  finally {
      close_resources();   # runs whether or not an exception was thrown
  }

(Try::Tiny / Feature::Compat::Try 只有當定位超過 5.34 的磁柱時才需要使用。)

  • 多重值for 迴圈 *(自 5.40 起穩定) * — 請參閱上方 5.36 項目;它們在本版本中從實驗中畢業到穩定。

  • builtin::infbuiltin::nan (實驗自 5.40 起) — 輸入的浮點數無限和非數字常數,消除9**9**9 或 POSIX hacks in numerical code。

  • **^^ 邏輯 XOR 運算子 ** (5.40) — 完成中優先順序邏輯運算子集 (&&, ||, ^^);適用於布林遮罩作業。

  • **use v5.40 匯入內建函數 **— 超出啟用功能組合,use v5.40 也會匯入對應的builtin 版本組合,使所有穩定builtin:: 函數可用為不含個別名稱的簡稱use builtin 敘述句。

    核心 Perl 類型

Perl 的三個建構基礎資料模型中心:

構造 Sigil 它擁有什麼
定量 $ 單一值:數字、字串、參照或undef
陣列 @ 依整數編製索引的已排序純量清單
雜湊 % 依字串鍵入的純量值未排序集合

其他所有項目 (物件、結案、複雜的資料結構) 都是透過 參考資料 從這三個基礎元構建而成 (\@array, \%hash, sub { ... }).

此模型具有額外的彈性。單一陣列可以同時保存整數、浮點數、字串以及巢狀參照。這種靈活性正是 Perl 20 年來主導的系統管理和 Web 文稿語言。

對比 R

R 佔據了好奇的中間地。就像 Perl 一樣,它是動態且解譯的語言 — 變數是未鍵入的容器,函數是一流的值,而互動式 REPL 則是主要開發環境。R 甚至有直接類比到 Perl 的三種核心類型:

Perl 概念 R 類比
$scalar length-1 原子向量或純量列表
@array list()
%hash 名稱list()
參考 (\@arr) R 不使用明確的參照;改為複製修改語意

但 R 的 workhorse 類型,即 原子向量 沒有直向的 Perl 對方。R 原子向量是連續的,同質上打字的記憶體區塊 — CPU 快取所獎勵的佈局 。R 中的每個內建純量實際上都是一個長度為 1 的原子向量;沒有”裸純量” 不在原子向量 。

此設計選擇意謂著 R 程式碼會以 BLAS 層次傳輸量的數百萬倍,自然在向量上運作,而不需要使用者編寫單一迴圈或配置特殊的迴圈。”陣列” 物件。

R 的原子型態為 :

R 原子類型 儲存 C 等效
logical 4 個位元組 / 元素 int (含北美片)
integer 4 個位元組 / 元素 int32_t
double 8 個位元組 / 元素 double
complex 16 個位元組 / 元素 _Complex double
character 指向 CHARSXP char * (實習)
raw 1 個位元組 / 元素 uint8_t

R also defines higher-level structures built on atomic vectors:

  • 矩陣 — 具有 2D 原子向量的dim 屬性。
  • 陣列 — N-D 原子向量與dim 屬性。
  • data.frame — 具名的等長原子向量清單;lingua franca of
    R 中的表格式資料。
  • 因素 — 含有 1 個整數向量levels 屬性;將類別資料編碼。

The lesson: 用於統計和資料科學應用程式時,R 的運算效能會直接從其連續的原子向量流動。Perl 的同等效能路徑是擴充套件 (亦是獨立的) matlab 如環境),Perl 資料語言PDL.


  1. 輸入 PDL:強烈鍵入的 N 維度陣列

Perl Data Language (PDL、pdl.perl.org) 以 ndarrays (N-dimensional Arrays) 擴充 Perl:連續、強式輸入的記憶體緩衝區,其外觀與感覺就像一流的 Perl 物件。

use PDL;

# A 1-D float ndarray — 4 bytes × 5 elements in one contiguous block
my $v = float( 1.0, 2.0, 3.0, 4.0, 5.0 );

# A 128-dimensional random database of 1000 vectors — all in cache-friendly memory
my $db = random( 128, 1000 );   # double by default

# Dot product of every DB vector against a query — a single BLAS call
my $scores = $db x $query->transpose;

PDL 原始類型

PDL exposes the full palette of C numeric types as first-class constructors:

PDL 類型 位元組 C 類型 建構子
byte 1 uint8_t byte(...)
short 2 int16_t short(...)
ushort 2 uint16_t ushort(...)
long 4 日 int32_t long(...)
indx 4 或 8 ssize_t indx(...)
longlong 8 int64_t longlong(...)
float 4 日 float float(...)
double 8 double double(...)
cfloat 8 _Complex float cfloat(...)
cdouble 16 _Complex double cdouble(...)

Post 1 — 序列化和 I/O:VectorIO 模組

檔案:VectorIO.pm

該引擎將向量儲存為內裝的二進制小點MessagePack 有效負載。本文涵蓋:

  • 設計一個乾淨的模組Exporter- 基礎公用 API use v5.40.

  • 在系統界限強制實行綱要正確性的驗證協助程式。

    Post 2 — 模擬向量資料庫

檔案:simulate_vectorDB.pl

在搜尋資料庫之前,我們需要一個資料庫。此文章顯示:

  • 產生可再現的隨機浮點向量與PDL::random.

  • 使用GetOpt::Long 用於人體工學 CLI 選項剖析。

  • 寫一個--seed- 受控制的模擬會在執行時產生相同的資料庫,對於基準而言至關重要。

    Post 5 — Mini-Batch K-Means:擴展至大型資料集

檔案:compare_kmeans_centroids.pl

完整 k-means 需要在記憶體中執行所有資料以進行每次重複。Mini-batch k-means 會交易少量的甲狀腺準確度,以大幅減少記憶體和運算。這篇文章探討:

  • 在 PDL 中實作真正的重新取樣迷你批次迴圈。

  • 量身定制全迷你批次變體之間的甲狀腺漂移。

  • R 的並排輸出MiniBatchKmeansClusterR 套件。

    Post 6 — 反轉檔案索引 (IVF) 搜尋

檔案:compare_ivf_search.pl

有了甲狀腺功能,我們可以分割資料庫,並執行近似鄰近搜尋的子線性。本文涵蓋:

  • Building the inverted lists: 將每個資料庫向量對應至其最近的中心。
  • The unpack_inverted_lists 協助者進入VectorIO.
  • Querying: 尋找最接近 K 的甲狀腺,然後只搜尋這些清單。
  • 準確度與加速權衡,因為試用名單數量不同。

Sandbox:SSI Mermaid wardley-beta 圖表

wardley-beta title Jamstack Wiki Value Chain anchor Business [0.95, 0.35] component Cloud Hosting [0.80, 0.80] component Agentic AI [0.25, 0.35] component Jamstack Wiki [0.70, 0.55] component Markdown Editor [0.50, 0.60] component Version Control [0.05, 0.65] component SSG [0.60, 0.80] Business -> Jamstack Wiki Agentic AI -> Markdown Editor Jamstack Wiki -> Cloud Hosting Jamstack Wiki -> Markdown Editor Agentic AI -> Version Control SSG -> Jamstack Wiki evolve Version Control 0.80 evolve Agentic AI 0.55 note "Standardized Version Control allows Agentic AI to evolve faster" [0.15, 0.30]