0Pricing
Pandas & NumPy Academy · บทเรียน

ฟังก์ชันสากล (ufuncs)

ใช้ฟังก์ชันในตัวแบบทีละสมาชิก เช่น np.sqrt, np.abs, np.exp และ np.log กับอาร์เรย์โดยไม่ต้องเขียนลูป

ฟังก์ชันสากล (ufuncs) เป็นบทเรียน Pandas & NumPy Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Pandas & NumPy Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน

ufuncs คืออะไร

ฟังก์ชันสากล (ufuncs) ดำเนินการคำนวณกับสมาชิกทุกตัวของอาร์เรย์พร้อมกันด้วยภาษา C ที่คอมไพล์แล้ว จึงเร็วกว่าลูป Python มาก ⚡

import numpy as np

a = np.array([1.0, 4.0, 9.0, 16.0])
print(np.sqrt(a))  # [1. 2. 3. 4.]
# Equivalent Python loop would be hundreds of times slower

ufuncs ทางคณิตศาสตร์: sqrt, exp, log

ฟังก์ชันคณิตศาสตร์ที่คุณชื่นชอบล้วนเป็น ufuncs เช่น np.sqrt, np.exp, np.log และอื่น ๆ ฟังก์ชันเหล่านี้ทำงานกับอาร์เรย์ทั้งชุดพร้อมกันและจัดการกรณีพิเศษได้อย่างเหมาะสม

import numpy as np

a = np.array([0.0, 1.0, 2.0, 3.0])
print(np.exp(a))         # [1.    2.718 7.389 20.086]
print(np.log(np.exp(a))) # [0. 1. 2. 3.]
print(np.log2(np.array([1, 2, 4, 8])))  # [0. 1. 2. 3.]

ufuncs ตรีโกณมิติ

ufuncs ตรีโกณมิติของ NumPy เช่น np.sin และ np.cos ต้องรับมุมเป็นเรเดียน ใช้ np.deg2rad เพื่อแปลงองศาก่อน

import numpy as np

angles = np.array([0, 30, 60, 90])
rad = np.deg2rad(angles)
print(np.sin(rad).round(4))  # [0.     0.5    0.866  1.   ]
print(np.cos(rad).round(4))  # [1.     0.866  0.5    0.   ]

np.abs, np.floor, np.ceil, np.round

สำหรับการปัดเศษ ให้ใช้ np.floor (ปัดลง), np.ceil (ปัดขึ้น) และ np.round (ปัดเป็นค่าที่ใกล้ที่สุด) ฟังก์ชันเหล่านี้จัดการค่าทศนิยมทั่วทั้งอาร์เรย์ได้ในครั้งเดียว

import numpy as np

a = np.array([-2.7, 0.4, 1.5, 3.9])
print(np.abs(a))     # [2.7 0.4 1.5 3.9]
print(np.floor(a))   # [-3.  0.  1.  3.]
print(np.ceil(a))    # [-2.  1.  2.  4.]
print(np.round(a))   # [-3.  0.  2.  4.]

np.maximum และ np.minimum

np.maximum(a, b) เลือกค่าที่มากกว่าจากอาร์เรย์สองตัวในแต่ละตำแหน่ง ซึ่งต่างจาก np.max ที่คืนค่าเพียงหนึ่งค่า np.maximum(a, 0) ก็คือ ReLU

import numpy as np

a = np.array([-3, 1, 5, -2, 4])
b = np.array([0, 0, 3, 3, 3])

print(np.maximum(a, b))  # [0 1 5 3 4]
print(np.minimum(a, b))  # [-3  0  3 -2  3]

# ReLU
print(np.maximum(a, 0))  # [0 1 5 0 4]

np.clip สำหรับจำกัดขอบเขตค่า

np.clip จะทำให้สมาชิกทุกตัวอยู่ภายในช่วงที่กำหนด ค่าที่ต่ำเกินไปจะถูกปรับขึ้นเป็นค่าต่ำสุด และค่าที่สูงเกินไปจะถูกปรับลงเป็นค่าสูงสุด เหมาะสำหรับจำกัดขอบเขตของค่า

import numpy as np

a = np.array([0.1, 0.5, -0.2, 1.3, 0.9])
clipped = np.clip(a, 0.0, 1.0)
print(clipped)  # [0.1 0.5 0.  1.  0.9]

ufuncs กับอาร์เรย์หลายมิติ

ufuncs ทำงานกับอาร์เรย์ที่มี รูปร่างใดก็ได้ การคำนวณจะเกิดขึ้นกับสมาชิกแต่ละตัว และผลลัพธ์จะมีรูปร่างเดิมโดยไม่ต้องเปลี่ยนรูปร่าง

import numpy as np

m = np.array([[1.0, 4.0], [9.0, 16.0]])
print(np.sqrt(m))
# [[1. 2.]
#  [3. 4.]]

พารามิเตอร์ out เพื่อประหยัดหน่วยความจำ

ufunc ทุกตัวรับอาร์กิวเมนต์ out= เพื่อเขียนผลลัพธ์ลงในอาร์เรย์ที่มีอยู่แล้ว วิธีนี้ไม่ต้องสร้างอาร์เรย์ใหม่ จึงมีประโยชน์ในลูปที่ทำงานถี่และต้องควบคุมหน่วยความจำ

import numpy as np

a = np.array([1.0, 4.0, 9.0])
result = np.empty(3)
np.sqrt(a, out=result)  # write directly into result
print(result)  # [1. 2. 3.]

np.add.reduce และ .accumulate

ufunc แต่ละตัวมีเมธอด .reduce() สำหรับรวมสมาชิกทั้งหมด (np.add.reduce ก็คือการหาผลรวม) และมี .accumulate() สำหรับสร้างผลรวมสะสม

import numpy as np

a = np.array([1, 2, 3, 4, 5])
print(np.add.reduce(a))       # 15
print(np.add.accumulate(a))   # [ 1  3  6 10 15]
print(np.multiply.reduce(a))  # 120

np.frompyfunc สำหรับ ufuncs แบบกำหนดเอง

np.frompyfunc แปลงฟังก์ชัน Python ใด ๆ ให้เป็น ufunc ที่นำไปใช้กับอาร์เรย์ได้ แต่จะช้ากว่าฟังก์ชันที่มีมาให้ จึงเหมาะสำหรับการสร้างต้นแบบอย่างรวดเร็ว

import numpy as np

def clamp_positive(x):
    return x if x > 0 else 0.0

vfunc = np.frompyfunc(clamp_positive, 1, 1)
a = np.array([-2, 3, -1, 5])
print(vfunc(a))  # [0.0 3 0.0 5]  (object dtype)

การเปรียบเทียบ ufuncs กับลูป Python

ความเร็วแตกต่างกันอย่างมาก เมื่อมีสมาชิกหนึ่งล้านตัว ufunc อาจเร็วกว่าลูป Python ประมาณ 200 เท่า ดังนั้นงานคำนวณตัวเลขควรเลือกใช้ ufuncs ก่อนเสมอ 🚀

import numpy as np
import time

a = np.random.rand(1_000_000)

start = time.perf_counter()
np.sqrt(a)
print('ufunc:', round(time.perf_counter() - start, 4), 's')

start = time.perf_counter()
[x ** 0.5 for x in a]
print('loop:', round(time.perf_counter() - start, 4), 's')

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจเรื่อง ufuncs ของ NumPy จากบทเรียนนี้

สรุปบทเรียน

ทำได้ดีมาก ufuncs คำนวณทีละสมาชิกด้วยภาษา C ที่รวดเร็ว รองรับ sqrt, exp, log และฟังก์ชันตรีโกณมิติ อีกทั้งอาร์กิวเมนต์ out= ยังช่วยประหยัดหน่วยความจำ บทถัดไปคือฟังก์ชันการรวมค่า

คำถามที่พบบ่อย

บทเรียน “ฟังก์ชันสากล (ufuncs)” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ฟังก์ชันสากล (ufuncs)” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Pandas & NumPy Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ฟังก์ชันสากล (ufuncs)”

ใช้ฟังก์ชันในตัวแบบทีละสมาชิก เช่น np.sqrt, np.abs, np.exp และ np.log กับอาร์เรย์โดยไม่ต้องเขียนลูป คุณปฏิบัติ Pandas & NumPy Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Pandas & NumPy Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Pandas & NumPy Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “ฟังก์ชันสากล (ufuncs)” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Pandas & NumPy Academy นี้ได้ไหม

ได้ บทเรียน Pandas & NumPy Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ฟังก์ชันสากล (ufuncs)
  2. ฟังก์ชันการรวมค่า
  3. กฎการกระจายค่า
  4. การทำมาสก์แบบบูลีนและการใช้ดัชนีแบบยืดหยุ่น
← กลับไปที่ Pandas & NumPy Academy