Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

ทำความเข้าใจ Matrices ใน Ruby: นิยาม การประยุกต์ใช้ และวิธีสร้าง

Matrix (เมทริกซ์) คืออาร์เรย์ 2D (2-dimensional) ที่ใช้เก็บและทำงานกับข้อมูลแบบสเปรดชีต (spreadsheet-like data)

พวกมันใช้ได้สำหรับ:

  • การแทนกระดานในเกมบนโต๊ะ (หมากรุก, ดัมมี่, ฯลฯ)
  • สถิติและการวิเคราะห์ข้อมูล
  • การสร้างกราฟและพล็อต (plots & graphs)

เพราะโครงสร้างข้อมูลนี้ทรงพลัง จึงช่วยได้มากที่จะเรียนรู้วิธีใช้

วิธีสร้าง Matrix ใน Ruby

คุณสามารถสร้าง matrix ด้วยอาร์เรย์ได้

เช่นนี้:

matrix = [
  [1,2,3],
  [4,5,6],
  [7,8,9]
]

สิ่งนี้สร้างเมทริกซ์ 3×3 และเป็นตัวเลือกที่ดีที่สุด หากคุณต้องการเก็บข้อมูล 2 มิติเป็นกระดานหรือชุดตำแหน่ง

แต่ถ้าคุณต้องการรวมเมทริกซ์ผ่านการบวก ลบ และคูณ...

คุณสามารถใช้คลาส Matrix ได้

วิธีใช้:

require 'matrix'
a = Matrix[[1,2,3], [4,5,6], [7,8,9]]
b = Matrix[[1,2,3], [4,5,6], [7,8,9]]

ตอนนี้คุณบวกได้:

a + b # Matrix[[2, 4, 6], [8, 10, 12], [14, 16, 18]]

คุณสามารถเข้าถึงค่าแต่ละค่าได้แบบนี้:

a[0, 1]

สิ่งนี้ ต่างจากเวอร์ชันอาร์เรย์ ซึ่งจะใช้ไวยากรณ์นี้:

matrix[0][1]

ทั้งอาร์เรย์และเมทริกซ์สามารถ transpose ได้ หมายถึงแถวจะกลายเป็นคอลัมน์ และคอลัมน์กลายเป็นแถว

ตัวอย่าง:

matrix.transpose # [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

จำไว้ด้วย:

ออบเจ็กต์ Matrix เป็น immutable (ไม่เปลี่ยนแปลงได้) ดังนั้นคุณไม่สามารถเปลี่ยนค่าได้โดยไม่สร้างเมทริกซ์ใหม่ คลาส Matrix นี้ส่วนใหญ่สำหรับการดำเนินการทางคณิตศาสตร์ หากคุณต้องการการวิเคราะห์ข้อมูลและสถิติ คุณจะต้องการอะไรที่ทรงพลังกว่า

อย่างเช่น...

Gem Daru

Daru เป็น gem ที่ช่วยให้คุณทำงานกับเมทริกซ์ ได้สถิติจากพวกมัน และพิมพ์เป็นตารางที่จัดรูปแบบสวยงาม Daru ยังรวมกับ gems plotting ใน Ruby ด้วย ดังนั้นคุณสามารถสร้างพล็อตและกราฟจากข้อมูลของคุณได้

ตัวอย่าง:

require 'daru'
df = Daru::DataFrame.new(
  { "A" => [1,2,3], "B" => [4,5,6], "C" => [7,8,9] },
  index: ["A", "B", "C"]
)

นี่พิมพ์ตารางต่อไปนี้:

  A  B  C
A 1  4  7
B 2  5  8
C 3  6  9

คุณสามารถเข้าถึงคอลัมน์เฉพาะได้แบบนี้:

df['A']

หรือโดยดัชนีตัวเลข:

df[0]

และคุณสามารถได้สถิติแบบนี้:

df['B'].describe # statistics
# count 3
# mean 5.0
# std 1.0
# min 4
# max 6

ส่วนที่ดีที่สุด?

คุณสามารถโหลดข้อมูลโดยตรงจากไฟล์ CSV, ActiveRecord และแม้แต่ไฟล์ Excel

ตัวอย่าง:

df = Daru::DataFrame.from_csv('healthy_food.csv')

และคุณสามารถกรองข้อมูลด้วยนิพจน์ where ได้

ตัวอย่าง...

ถ้าเรามีคอลัมน์ "carbs" เราสามารถหาแถวทั้งหมดในเมทริกซ์ที่มีค่าน้อยกว่า 25

เช่นนี้:

df.where(df['carbs'].lt(25))

คุณยังสามารถ sort, group_by และ aggregate data frames ของคุณได้

ตัวอย่าง:

df = Daru::DataFrame.new(
  { str: %w(a b c d a), num: [52,12,7,17,1] }
)
df.group_by(:str).aggregate(num: :sum)
# num
# a 53
# b 12
# c 7
# d 17

การพล็อต (Plotting) ด้วย Daru

Daru อนุญาตให้คุณสร้างการแสดงภาพข้อมูล และส่งออกเป็นไฟล์ HTML

ตัวอย่าง:

df = Daru::DataFrame.new(
  {'Cat Names' => %w(Kitty Leo Felix), 'Weight' => [2,3,5]}
)
df.plot(type: :bar, x: 'Cat Names', y: 'Weight') do |plot, _|
  plot.x_label 'Cat Name'
  plot.y_label 'Weight'
  plot.yrange [0, 5]
end
.export_html

สิ่งนี้สร้างแผนภูมิ:

ทำความเข้าใจ Matrices ใน Ruby: นิยาม การประยุกต์ใช้ และวิธีสร้าง

คุณจะพบแผนภูมินี้เป็นไฟล์ HTML ในโฟลเดอร์เดียวกับโค้ดของคุณ

หากคุณต้องการใช้ Daru ในแอป Rails คุณจะต้องเพิ่ม gem daru-view เข้าไป หรือใช้ gem อื่น เช่น chartkick

สรุป

คุณได้เรียนรู้เกี่ยวกับเมทริกซ์ใน Ruby เพื่อทำงานกับข้อมูล 2 มิติ!

อย่าลืมแชร์บทความนี้เพื่อให้คนอื่นหาเจอ

ขอบคุณที่อ่านครับ