นี่คือคำสั่ง PDL::Tipsp ที่สามารถเรียกใช้ในผู้ให้บริการโฮสติ้งฟรีของ OnWorks โดยใช้หนึ่งในเวิร์กสเตชันออนไลน์ฟรีของเรา เช่น Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS
โครงการ:
ชื่อ
PDL::Tips - เกร็ดเล็กเกร็ดน้อยของอาร์คานาที่มีประโยชน์ เกร็ดความรู้การเขียนโปรแกรมและอื่น ๆ
เรื่องย่อ
ใช้ PDL;
#อะไรก็เกิดขึ้นได้
DESCRIPTION
หน้านี้แสดงสำนวนที่เป็นประโยชน์ คำแนะนำที่เป็นประโยชน์ และเคล็ดลับในการใช้ Perl Data Language
v2.0
การช่วยเหลือ
ใช้ "ช่วยเหลือช่วยเหลือ" ภายใน เพิร์ล or pdl2 หรือใช้โปรแกรม "pdldoc" จากบรรทัดคำสั่ง
สำหรับการเข้าถึงเอกสาร PerlDL เวอร์ชัน HTML ของหน้าควรเป็น
ปัจจุบันใน HtmlDocs/PDL ไดเร็กทอรีของการกระจาย PDL เพื่อค้นหาไดเร็กทอรีนี้
ลองทำดังต่อไปนี้
pdl> foreach ( แผนที่{"$_/PDL/HtmlDocs"}@INC ) { p "$_\n" if -d $_ }
การจัดทำดัชนี สำนวน
รหัสต่อไปนี้ทำให้เวกเตอร์จำนวนมากเป็นปกติใน $a สิ่งนี้ใช้ได้โดยไม่คำนึงถึง
มิติของ $a
$a /= $a->ซัมโอเวอร์->ตัวแทนเชิด(0);
อะไร is จริง เกิดขึ้น?
หากคุณต้องการดูว่าโค้ดนี้ทำอะไรอยู่ ให้ลองใช้คำสั่ง
PDL::แกนหลัก::set_debugging(1);
บางแห่ง. สิ่งนี้แสดงข้อมูลการดีบักจำนวนมากสำหรับ PDL ไปยัง STDOUT แผนสำหรับ
ในอนาคตรวมถึงการทำให้สามารถเปลี่ยนเส้นทางผลลัพธ์และทำให้เป็นไปได้
เลือกข้อความที่มีความแม่นยำมากขึ้น
ข้อความจำนวนมากมาจาก "Basic/Core/pdlapi.c" และคุณสามารถดูที่มาเพื่อดู
เกิดอะไรขึ้น.
หากคุณมีเวลาเพิ่มเติมในการทำงานกับกลไกเหล่านี้ โปรดแจ้ง pdl-porters mailing
รายการ.
หน่วยความจำ เงินออม
หากคุณกำลังเรียกใช้บางสิ่งซ้ำๆ ซึ่งเลือกดัชนีบางตัวของพิดเดิ้ลขนาดใหญ่
กดไลก์
ในขณะที่(หนึ่ง) {
$inds = ที่ไหน($a>0);
$a = $a->ดัชนี($inds);
$b = $b->ดัชนี($inds);
func($b,$a);
}
หากคุณไม่ได้เขียนถึง $b จะเป็นการช่วยประหยัดหน่วยความจำได้มากในการเปลี่ยนเป็น
$b = $b->index($inds)->ตัด;
วิธีการใหม่ "ตัด" เป็นสาเหตุที่ทำให้ความสัมพันธ์ในการเขียนกลับถูกลืม มันเป็นเหมือน
คัดลอกเว้นแต่จะเปลี่ยน piddle เดิมและส่งคืน)
แน่นอน วิธีที่ดีที่สุดที่จะทำข้างต้นคือ
$inds = xvals ($a->long);
ในขณะที่(หนึ่ง) {
$inds0 = โดยที่($a>0);
$inds1 = $inds->index($inds)->แยก;
$a = $a0->ดัชนี($inds1);
$b = $b->index($inds1)->แยก;
func($b,$a);
}
ซึ่งไม่บันทึกอินสแตนซ์ชั่วคราวของ $a ทั้งหมดในหน่วยความจำ ดู "mandel.pl" ใน
ตัวอย่างไดเร็กทอรีย่อยการสาธิตของการแจกจ่าย PerlDL
PP ความเร็ว
หากคุณต้องการเขียนโค้ด PP ที่รวดเร็วจริงๆ สิ่งแรกที่คุณต้องทำคือต้องแน่ใจว่า
ที่คอมไพเลอร์ C ของคุณได้รับอนุญาตให้ทำการเพิ่มประสิทธิภาพที่จำเป็น
สิ่งนี้หมายความว่าคุณต้องยอมให้ตัวแปรต่างๆ เข้าไปใน
ลงทะเบียน:
วน (ก) %{
$a() += $COMP(foo_member) * $b()
%}
ขยายเป็น
สำหรับ (i=0; i<10000; i++) {
a[i] += __privtrans->foo_member * b[i];
}
เป็นสิ่งที่แย่ที่สุดที่คุณสามารถทำได้ เนื่องจากคอมไพเลอร์ C ของคุณไม่ได้รับอนุญาตให้ถือว่า "a"
ไม่ปิดบัง "foo_member" ซึ่งยับยั้งการสร้างเวคเตอร์อย่างสมบูรณ์ แทนที่จะทำ
ลอย foo = $COMP(foo_member);
วน (ก) %{
$a() += ฟู * $b();
%}
นี่ไม่ใช่ข้อจำกัดที่เกิดจาก PP แต่เกิดจากความหมายของ ANSI C แน่นอน เราทำสำเนาได้
struct เป็นตัวแปรท้องถิ่นและย้อนกลับ แต่นั่นอาจทำให้เกิดสิ่งแปลก ๆ ได้
บางครั้ง
มีปัญหาอื่น ๆ อีกมากมายในการจัดระเบียบลูป
ขณะนี้เรากำลังวางแผนที่จะให้ PP สามารถทำสิ่งต่าง ๆ ที่มีความกว้างคงที่เช่นเดียวกับทางกายภาพ
piddles (ซึ่งการวนรอบมิติแรกจะถูกกว่าเนื่องจากมีน้อยกว่า
การเพิ่มขึ้นที่แตกต่างกันซึ่งอาจสร้างความแตกต่างในเครื่องที่มีจำนวนเล็กน้อย
ทะเบียน)
ใช้ PDL::Tipsp ออนไลน์โดยใช้บริการ onworks.net