Pandas & NumPy Academy · درس

الدوال الشاملة (ufuncs)

طبّق الدوال المضمنة عنصرًا بعنصر، مثل np.sqrt وnp.abs وnp.exp وnp.log، على المصفوفات من دون كتابة حلقات.

الدرس 1 من 413 خطوة

الدوال الشاملة (ufuncs) درس مجاني في Pandas & NumPy Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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

دوال ufunc الرياضية: 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.]

دوال ufunc المثلثية

تتوقع دوال ufunc المثلثية في 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]

دوال ufunc على المصفوفات متعددة الأبعاد

تعمل 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 ليست سوى sum)، وعلى .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 أسرع بنحو 200 مرة من حلقة Python. وفي العمليات العددية، استخدم 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= الذاكرة. والآن ننتقل إلى دوال التجميع.

البدء مجانًا

تعلم Python مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
30
الدروس
120

الأسئلة الشائعة

هل درس «الدوال الشاملة (ufuncs)» مجاني؟

نعم — نص درس «الدوال الشاملة (ufuncs)» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Pandas & NumPy Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Pandas & NumPy Academy 4 دروس في المجموع.

ماذا ستتعلم في «الدوال الشاملة (ufuncs)»؟

طبّق الدوال المضمنة عنصرًا بعنصر، مثل np.sqrt وnp.abs وnp.exp وnp.log، على المصفوفات من دون كتابة حلقات. تتمرن على Pandas & NumPy Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Pandas & NumPy Academy؟

لا تُشترط خبرة سابقة. Pandas & NumPy Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «الدوال الشاملة (ufuncs)»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Pandas & NumPy Academy هذا؟

نعم. كل درس في Pandas & NumPy Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. الدوال الشاملة (ufuncs)
  2. دوال التجميع
  3. قواعد البثّ
  4. التنقية المنطقية والفهرسة المتقدمة
← العودة إلى Pandas & NumPy Academy