σμ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.2·~35 دمبتدئ

الفهرسة وتقطيع المصفوفات

الموضع في المسارالوحدة 2 من 11 · الموضوع 2 من 20
2.2 الفهرسة وتقطيع المصفوفات
—درجة المختبر— / 100إجمالي XP—التتابع—

المواضع والشرائح، الآن في أبعاد متعددة

تُفهرس المصفوفات مثل القوائم: a[0] أول عنصر وa[-1] الأخير وa[start:stop:step] شريحة تتوقف قبل stop. والفرق أن المصفوفة قد تكون متعددة الأبعاد، فتعطي فهرسًا أو شريحة لكل بُعد مفصولة بفواصل: m[row, column]. وتعني : وحدها «كل هذا البُعد»، فـm[:, 1] هو العمود الثاني كله وm[1] (أو m[1, :]) هو الصف الثاني كله. والأرقام السالبة تعدّ من النهاية، وخطوة -1 تعكس الترتيب.

import numpy as np

a = np.array([10., 11., 12., 13., 14., 15.])
print(a[0], a[-1])           # 10.0 15.0
print(a[1:4])                # [11. 12. 13.]
print(a[-2:])                # [14. 15.]
print(a[::2])                # [10. 12. 14.]
print(a[::-1])               # [15. 14. 13. 12. 11. 10.]

# Two dimensions: one index or slice per dimension
m = np.arange(12).reshape(3, 4)
print(m[1, 2])               # 6
print(m[:, 1])               # [1 5 9]      the whole second column
print(m[-1, :])              # [ 8  9 10 11] the last row
print(m[0:2, 1:3])           # [[1 2]
                             #  [5 6]]

الشرائح عروض لا نسخ

على خلاف شريحة القائمة لا تنسخ الشريحة الأساسية في NumPy البيانات: بل هي عرض (view) على الذاكرة نفسها، فالكتابة عبرها تغيّر المصفوفة الأصلية. وهذا يجعل التقطيع فوريًا حتى للمصفوفات الضخمة لكنه يفاجئ الناس: فـpart = a[1:4]; part[0] = 99 يغيّر a[1] أيضًا. وحين تحتاج مصفوفة مستقلة استدعِ .copy(). ويمكنك التحقق بـnp.shares_memory(a, b). والسلوك نفسه ينطبق على الصفوف والأعمدة والخطوات والشرائح المعكوسة.

import numpy as np

a = np.array([10., 11., 12., 13., 14., 15.])

part = a[1:4]           # a view, no data copied
part[0] = 99
print(a)                # [10. 99. 12. 13. 14. 15.]   a changed too

safe = a[1:4].copy()    # an independent array
safe[0] = -1
print(a)                # [10. 99. 12. 13. 14. 15.]   unchanged

print(np.shares_memory(a, a[::2]))   # True
print(np.shares_memory(a, safe))     # False

الأقنعة المنطقية وقوائم الفهارس

تعطي مقارنة مصفوفة مصفوفةً من القيم المنطقية بالحجم نفسه: r > 0 هي True حيث العائد موجب. وباستخدام هذا القناع فهرسًا، r[r > 0]، تُنتقى تلك العناصر فقط. اجمع الشروط بـ& (و) و| (أو) و~ (ليس)، كل شرط بين قوسين، لأن and/or في بايثون لا تعملان على المصفوفات. وتصلح قائمة أو مصفوفة أعداد صحيحة أيضًا a[[0, 2, 5]] فتأخذ تلك المواضع بذلك الترتيب. والانتقاء بالقناع أو بقائمة الفهارس ينسخ البيانات، ويمكنك الإسناد عبر قناع أيضًا: a[a > 3] = 0.

import numpy as np

r = np.array([0.01, -0.02, 0.03, -0.01, 0.0, 0.02])
print(r > 0)                        # [ True False  True False False  True]
print(r[r > 0])                     # [0.01 0.03 0.02]
print(r[(r > 0) & (r < 0.025)])     # [0.01 0.02]    parentheses are required
print(np.where(r > 0)[0])           # [0 2 5]        positions where it holds

# Pick by position, in any order
w = np.array([3.0, 9.0, 1.0, 7.0])
order = np.argsort(-w)              # positions from the largest value down
print(order[:2], w[order[:2]])      # [1 3] [9. 7.]

# Assign through a mask
counts = np.array([1, 2, 3, 4, 5, 6])
counts[counts > 3] = 0
print(counts)                       # [1 2 3 0 0 0]
import numpy as np

# Rows are days, columns are assets (AAPL, MSFT, GOOG)
R = np.array([[ 0.02, -0.01,  0.03],
              [ 0.01,  0.00,  0.02],
              [-0.03,  0.02, -0.01],
              [ 0.00,  0.01,  0.04]])

print(R[:, [0, 2]])             # the AAPL and GOOG columns, as a copy
print(R[R[:, 0] > 0])           # the days on which AAPL rose (whole rows)
print(R[R[:, 0] > 0].shape)     # (2, 3)
print(R[-2:, 1].mean())         # 0.015  last two days of MSFT
اعرف ما لديك: عرض أم نسخةالشرائح الأساسية (a[1:4] وm[:, 1] وa[::2]) عروض؛ أما الأقنعة وقوائم الفهارس (a[a > 0] وa[[0, 2]]) فنُسخ. والدالة التي تُرجع شريحة من وسيطها تعطي المستدعي نافذة على بياناته نفسها، فقد تغيّرها كتابة لاحقة على نحو غير متوقع. قرّر عن قصد: أرجع عرضًا حين تهم السرعة وتكون البيانات للقراءة فقط، وإلا فـ.copy(). وتفحص اختبارات المختبر السلوكين.
  • فهرس أو شريحة لكل بُعد: m[row, col] وm[:, 1] (عمود) وm[-1] (آخر صف) وa[::-1].
  • الشرائح الأساسية عروض (الكتابة تنعكس؛ و.copy() للفصل)؛ والأقنعة وقوائم الفهارس تصنع نسخًا.
  • الأقنعة: a[a > 0] وتُجمع بـ& و| و~ بين أقواس؛ وnp.argsort تعطي المواضع بترتيب الفرز.

التالي: التوجيه (vectorisation)، استبدال حلقات بايثون بحساب على مصفوفات كاملة.

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

  • خذ أحدث الصفوف باستخدام last_rows25 نقطة
  • احتفظ بالمكاسب فقط باستخدام positive_values25 نقطة
  • خذ عيّنة كل k قيمة باستخدام every_kth25 نقطة
  • اعثر على مواضع أكبر k قيمة باستخدام top_k_indices25 نقطة
المستكشف · lab-35-1
▾ lab-35-1
…
bash · داخل المتصفح
learner@quantcraft:~/lab-35-1$
لم يتم تحميل Python بعدPythonLn 1, Col 1Spaces: 4UTF-8

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

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

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

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

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

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