σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft Academyالمسارات
Ctrl K
AO
+1.2k متعلّم
تسجيل الدخولانضم ↗
المسارات
AO
+1.2k متعلّم
تسجيل الدخول
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
مسار Python›الوحدة 2 · NumPy وpandas لبيانات السوق›الموضوع 2.1·~45 دمبتدئ

مصفوفات NumPy وأنواع البيانات dtype

الموضع في المسارالوحدة 2 من 11 · الموضوع 1 من 20
2.1 مصفوفات NumPy وأنواع البيانات dtype
—درجة المختبر— / 100إجمالي XP—التتابع—

لماذا المصفوفات وما هي المصفوفة

تستطيع قائمة بايثون أن تحمل أي شيء، مما يجعلها مرنة لكنها بطيئة للأرقام: فكل عنصر كائن مستقل. تضيف NumPy النوع ndarray، وهو كتلة من الذاكرة تحمل أرقامًا من نوع واحد متتابعة. والعمل على الكتلة كلها بكود مُترجَم أسرع عادةً بعشرات المرات من حلقة بايثون ويستهلك ذاكرة أقل بكثير. وتُبنى عليها تقريبًا كل مكتبة كمية (pandas وSciPy وscikit-learn). وتُستورد عُرفًا بـimport numpy as np.

import numpy as np

# Create arrays
prices = np.array([184.25, 185.0, 183.2])
print(prices)                       # [184.25 185.   183.2 ]
print(np.zeros(3))                  # [0. 0. 0.]
print(np.arange(0, 10, 3))          # [0 3 6 9]
print(np.linspace(0, 1, 5))         # [0.   0.25 0.5  0.75 1.  ]

# An array knows its shape
table = np.array([[1, 2, 3], [4, 5, 6]])
print(table.shape, table.ndim, table.size)   # (2, 3) 2 6

إنشاء المصفوفات

تحوّل np.array(list) قائمة (أو قائمة قوائم لبُعدين). وتصنع np.zeros(n) وnp.ones(n) مصفوفات ممتلئة، وتأخذ np.zeros((rows, cols)) صفًا للشكل. وتعمل np.arange(start, stop, step) مثل range لكنها تسمح بخطوات عشرية وتستثني stop؛ وبسبب التقريب فضّل np.linspace(start, stop, num) التي تعطي num نقطة متباعدة بانتظام وتشمل الطرفين. ولكل مصفوفة .shape (الحجم في كل بُعد) و.ndim (عدد الأبعاد) و.size (العدد الكلي للعناصر).

import numpy as np

# arange with floats can surprise; linspace gives exactly the points you ask for
print(len(np.arange(0, 1, 0.1)))     # 10  (1.0 is excluded)
print(len(np.linspace(0, 1, 11)))    # 11  (both ends included)

# Shapes and sizes
grid = np.zeros((3, 4))
print(grid.shape, grid.ndim, grid.size)   # (3, 4) 2 12
print(np.ones(2) * 5)                      # [5. 5.]

dtype: نوع واحد للمصفوفة كلها

لكل مصفوفة dtype: int64 (أعداد صحيحة) وfloat64 (أعداد عشرية) وbool ونسخ أصغر أو أكبر مثل float32 أو int8. تختار NumPy النوع من البيانات: الأعداد الصحيحة تعطي int64، وعدد عشري واحد يحوّل كل شيء إلى float64، وnp.nan (ليس رقمًا، علامة القيمة المفقودة) عدد عشري فيفرض float64. اختر النوع بنفسك بـdtype=... أو حوّل بـ.astype(...) التي تُرجع مصفوفة جديدة. والنوع الأصغر يوفّر ذاكرة (float32 نصف float64) على حساب الدقة.

import numpy as np

print(np.array([1, 2, 3]).dtype)            # int64
print(np.array([1, 2.5, 3]).dtype)          # float64  (one decimal upgrades everything)
print(np.array([True, False]).dtype)        # bool
print(np.array([1, 2, np.nan]))             # [ 1.  2. nan]  (nan is a float)

# astype returns a new array; smaller dtypes use less memory
prices = np.zeros(1000)
print(prices.nbytes)                        # 8000
print(prices.astype(np.float32).nbytes)     # 4000
print(np.array(["1.5", "2"], dtype=float))  # [1.5 2. ]  (text converted to numbers)

مزالق التحويل: البتر والفيض

يؤدي تحويل الأعداد العشرية إلى صحيحة بـ.astype(int) إلى البتر نحو الصفر، ولا تمثّل الأعداد العشرية معظم الكسور تمثيلًا دقيقًا، فـ19.99 * 100 تساوي 1998.9999999999998 وتُبتر إلى 1998 أي أقل بسنت. ولتحويل الأسعار إلى سنتات صحيحة قرّب أولًا: np.round(prices * 100).astype(np.int64). وللأنواع الصحيحة أيضًا مدى ثابت وتلتف بصمت: فـint8 يحمل من -128 إلى 127 فتصبح 100 * 2 هي -56. استخدم int64 للمال والعدّ، وتذكّر أن قسمة الأعداد الصحيحة بـ/ تعطي دائمًا أعدادًا عشرية بينما تقرّب // للأسفل.

import numpy as np

# Truncation: astype(int) cuts the decimals off
print(np.array([1.9, -1.9]).astype(int))              # [ 1 -1]
print(19.99 * 100, int(19.99 * 100))                  # 1998.9999999999998 1998
print(np.round(np.array([19.99]) * 100).astype(np.int64))   # [1999]

# Overflow: an int8 wraps around silently
small = np.array([100, 50], dtype=np.int8)
print(small * 2)                                      # [-56 100]

# / always gives floats, // floors
counts = np.array([1, 2, 3])
print(counts / 2, counts // 2)                        # [0.5 1.  1.5] [0 1 1]
انظر أولًا إلى الشكل والـ dtypeحين يسيء كود NumPy التصرف اطبع أولًا .shape و.dtype لكل مصفوفة معنية: فوجود int64 مفاجئ حيث توقعت float64 أو شكل (5, 1) بدل (5,) يفسّر معظم الأخطاء. فضّل بناء المصفوفات بدوال NumPy (np.linspace وnp.asarray وastype) بدل حلقات بايثون؛ وترفض المختبرات الحلقات لهذا السبب بالتحديد.
  • np.array وzeros وones وarange وlinspace تنشئ المصفوفات؛ و.shape و.ndim و.size تصفها.
  • نوع واحد لكل مصفوفة: int64 وfloat64 وbool؛ وastype تحوّل إلى مصفوفة جديدة.
  • astype(int) تبتر (قرّب أولًا)؛ وأنواع الأعداد الصحيحة الصغيرة تلتف بصمت؛ وnan يفرض الأعداد العشرية.

التالي: فهرسة المصفوفات وتقطيعها، لانتقاء الصفوف والأعمدة والنوافذ والقيم التي تحقق شرطًا.

المختبر: ما الذي يُقيَّم

  • ارسم نقاطًا متباعدة بانتظام باستخدام make_grid25 نقطة
  • حوّل قيمًا خامًا مختلطة إلى أعداد عشرية باستخدام to_float_array25 نقطة
  • أبلغ عن الشكل والحجم والـ dtype باستخدام describe_array25 نقطة
  • حوّل الأسعار إلى سنتات صحيحة بأمان باستخدام to_cents25 نقطة
المستكشف · lab-34-1
▾ lab-34-1
…
bash · داخل المتصفح
learner@quantcraft:~/lab-34-1$
لم يتم تحميل Python بعدPythonLn 1, Col 1Spaces: 4UTF-8

هل تريد إعادة ضبط هذا الموضوع؟

سيعود كل ما في lab-34-1 إلى الملفات الابتدائية وستُمسح الطرفية. ستفقد حلّك الحالي ولا يمكن التراجع عن ذلك.

سيُعاد ضبطه
  • main.py ← الشيفرة الابتدائية
  • سجل الطرفية ومخرجات الاختبارات
  • التغييرات غير المُرسلة
سيُحتفظ به
  • أفضل درجة في المختبر
  • نقاط XP والتتابع
  • تقدّم المحاضرة والملاحظات

سجّل الدخول لتشغيل الكود الخاص بك.

قراءة كل المحاضرات مجانية. أنشئ حسابًا أو سجّل الدخول لتشغيل الكود وتنفيذ الاختبارات وتسليم هذا المختبر.

  • بيئة تطوير داخل المتصفح مع طرفية bash — لا حاجة لتثبيت أي شيء
  • تصحيح فوري ونقاط خبرة ومكانك في المسار
إنشاء حسابتسجيل الدخول
أو
المتابعة عبر GitHub