Category: Mathematica

NetChain กับ NetGraph

เวลาสร้าง neural network ใน Mathematica นั้นมันจะมีสองคำสั่งที่ใช้กันหลักๆก็คือ NetChain กับ NetGraph แต่สองคำสั่งนี้จะต่างกันตรงที่ NetChain มันจะเรียงแต่ล่ะ layer ต่อๆกันเป็น linear เลยในขณะที่ NetGraph เนี้ยมันจะยืดหยุ่นมากกว่าโดยที่เราสามารถที่จะบอกได้ว่าแต่ล่ะ layer เนี้ยต่อกันยังไง เช่น    

แสดง output จาก ggplot ใน Mathematica

ลองดูตัวอย่างที่ผมเขียนนี้ครับ  ไอเดียก็คือว่าให้มันเขียนภาพเป็นไฟล์ pdf ด้วยคำสั่ง ggsave แล้วเรียกกลับมาใน Mathematica ด้วย Import  โค้ดที่เขียนนี้ดัดแปลงมาจาก https://mathematica.stackexchange.com/questions/16726/how-to-get-a-plot-generated-by-r-returned-in-an-output-cell      

วาดกราฟ exponential sums

พอดีว่าไปเห็นกราฟที่วาดจาก Exponential sums จากเวบ https://www.maths.unsw.edu.au/about/exponential-sums แล้วดูว่าสวยดีเลยอยากลองทำดูบ้างด้วย Mathematica การวาดกราฟจาก exponential sums หรือที่เขียนอยู่ในรูปแบบ ที่ทำนี้ก็คือถ้าเราค่อยๆบวกเข้าไปทีละเทอมและเอาค่าที่ได้มาพล็อตกราฟใน complex plane โดยที่แกนนอนคือจำนวนจริงและแกนตั้งคือจำนวนจินตภาพ ลองดูที่โค้ดน่าจะเข้าใจมากขึ้นครับ fn[n_] := Log[n]^4 NP = 5000; ls = Accumulate[Table[Exp[2 \[Pi] I fn[n]] // N, {n, 1, NP}]]; Manipulate[ ListPlot[{Re@#, Im@#}\[Transpose] &@(ls[[1 ;; np]]), Joined -> True, AspectRatio -> Full, PlotStyle -> Black, PlotRange -> {{-5, 70}, {-60, 20}}] , {np,

มาลองทำให้โค้ดMathematicaรันเร็วขึ้น

โค้ดที่เขียนด้วยMathematicaหรือภาษา Wolfram นั้นมันจะมีวิธีที่ช่วยให้มันรันได้เร็วขึ้นอยู่หลายวิธีครับ ขึ้นกับปัญหาและวิธีการเขียน ที่จะโชว์ให้ดูนี้ผมก็ใช้เทคนิคง่ายๆด้วยการทำ parallel ด้วยคำสั่ง ParallelTable และ compile ด้วยคำสั่ง Compile ครับ  โค้ดตัวอย่างที่จะเอามาลองนี้เป็นโค้ดที่ใช้วาดรูป Mandelbrot set ครับ แบบที่ 1 เป็นโค้ดเริ่มต้นที่ยังไม่มีการทำให้มันเร็วครับเขียนโดยใช้ loop จากคำสั่ง Table AbsoluteTiming[ test1 = Block[{i, x, p}, Table[i = 0; x = 0. I; p = r + I c; While[Abs@x <= Sqrt[2] && i < 9^3, x = x^2 + p; ++i];

รวมชีทไฟล์ XLSX แบบง่ายๆ

เห็นมีคนเข้ามาดูโพสท์ที่ผมเขียน เกี่ยวกับการรวมชีท Excel ที่มีheader เหมือนกัน (https://www.sakngoi.com/2011/01/23/การรวมms-excel-sheets-ไว้ในหน้าเดียว/) เยอะพอสมควร ก็เลยคิดว่าเขียนแบบง่ายๆไว้ให้ใช้กันแบบออนไลน์ก็คงดี ผมก็เลยเขียนแบบง่ายไว้ให้ครับที่ https://www.wolframcloud.com/objects/cae100b5-7a2d-41ed-bed4-da1b86a5f67d   เพียงลากไฟล์ xlsx ไปปล่อยหรือคลิกเลือกแล้วกด submit ครับ เช่นถ้าผมมีไฟล์xlsx ที่แต่ล่ะชีทเป็นตามนี้ ผลที่ได้ก็คือ จะมีแค่ชีทเดียวที่รวมทุกชีกเข้าไว้ด้วยกัน   บ้างครั้งมันอาจจะขึ้น error ว่า “The supplied object cannot be interpreted as a file of type XLSX.” ก็ให้ลองกดรีเพรชหน้านั้นใหม่นะครับแล้วลองคลิกโหลดไฟล์ใหม่ครับ

ใช้งาน gcc ที่มากับ Rtools ใน Mathematica

ใน Rtools จะมี compiler ของ gcc (mingw) มาด้วยแล้วทั้งที่เป็นแบบ 32 bits และ 64 bits หากอยากจะเอาไปใช้ใน Mathematica ก็ต้องเรียกผ่าน CCompilerDriver`GenericCCompiler` ครับ แล้วเพียงเซ็ต Path ของ gcc จาก Rtools นี้ให้ถูก เช่น Needs["CCompilerDriver`GenericCCompiler`"] ทดลองเรียกใช้งาน greeter = CreateExecutable[StringJoin[ "#include <stdio.h>\n", "int main(){\n", " printf(\"Hello MinGW-w64 world.\\n\");\n", "}\n"], "helloworld", "Compiler" -> GenericCCompiler, "CompilerInstallation" -> "C:/Rtools/mingw_64", "CompilerName" -> "x86_64-w64-mingw32-gcc.exe"] Import["!\""<>greeter<>"\"","Text"] Hello MinGW-w64 world. ที่นี้ถ้าอยากจะให้