• 0

استخراج أعمدة محددة في مصفوفة Numpy عددية

هذا سؤال سهل ولكن قل أن لدي مصفوفة X*Y. كل ما أريد فعله هو استخراج أعمدة معينة وتخزينها في مصفوفة أخرى ولكني أحصل على أخطاء في المكود لدي. هذا هو الكود:

>>> import numpy as np
>>> x = np.array([
... [0,1,2,3,4,5,6,7,8,9],
... [10,11,12,13,14,15,16,17,18,19],
... [20,21,22,23,24,25,26,27,28,29]
... ])
>>> extractedData = x[[:,1],[:,9]]
  File "<stdin>", line 1
    x[[:,1],[:,9]]
       ^
SyntaxError: invalid syntax
>>>

من المفترض أن السطر أعلاه يجب أن يكون كافياً ولكن يبدو أن ذلك غير كافي. حاولت أن أعرف أين المشكلة ولكنني لم أستطع إيجاد المشكلة. ما أحاول فعله هو إستخراج الأعمدة من 1 إلى 3، لكن لا أعرف أين المشكلة.

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 2

حسناً سأقترح لك عدة طرق، بدايةً سأقوم بإنشاء تابع لك، تمرر له رقم العمود أو الأعمدة التي تريدها أن تظهر في المصفوفة الجديدة ويعطيك الخرج المطلوب (تمررها على شكل قائمة):

import numpy as np
arr = np.random.randint(5, size=(5,3))
print(arr)
"""
[[4 1 2]
 [3 2 3]
 [0 1 4]
 [4 3 3]
 [2 3 0]]
"""
# التابع
def make(index,a):
  a=a.T
  b=a[index]
  return b.T
# الآن بفرض أنك تريد مصفوفة جديدة من المصفوفة الأصلية مكونة من ثاني و ثالث عمود
make([1,2],arr)
# الخرج
"""
array([[1, 2],
       [2, 3],
       [1, 4],
       [3, 3],
       [3, 0]])
"""
# إذا أردنا ثاني عمود فقط
make([1],arr)
"""
array([[1],
       [2],
       [1],
       [3],
       [3]])
"""

حيث اعتمدت على فكرة أخذ منقول المصفوفة ثم اختيار الأعمدة التي أريدها (التي أصبحت تشكل أسطر) ثم بعدها نأخذ المنقول مرة أخرى لتعطي الخرج. وبشكل أكثر سهولة يمكنك استخدام مفهوم الفهرسة والتقطيع في بايثون، بالشكل التالي:

# إذا أردت ثاني عمود
arr[:,[1]]
"""
array([[1],
       [2],
       [1],
       [3],
       [3]])
"""
# ثاني وثالث عمود
arr[:,[1,2]]
"""
array([[1, 2],
       [2, 3],
       [1, 4],
       [3, 3],
       [3, 0]])
"""

وأخيراً، إذا أردت أسطر وأعمدة محددين:

# ثاني وثالث عمود مع أول سطرين فقط
arr[:2,1:3]
"""
array([[1, 2],
       [2, 3]])
"""

 

2 اشخاص أعجبوا بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

أفترض أنك أردت العمودين 1 و 3, لتحديد عدة أعمدة مرة واحدة ، استخدم

X = data[:, [1, 3]]

أما لتحديد واحد في كل مرة استخدم

x, y = data[:, 1], data[:, 3]

يمكنك فعل ذلك أيضا باستخدام الأسماء كالتالي

data[:, ['Column Name1','Column Name2']]

يمكنك الحصول على الأسماء من خلال data.dtype.names

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

بوجة عام، لان شكل المصفوفة عندك ثنائية الابعاد، اي انها صفوف واعمدة فقط، فيمكنك استخلاص الاعمدة من 1 ل 3 كالتالي:

X = data[:, [1, 3]]

وبشكل عام، استخلاص اي حجم من الصفوف يتم على الشكل التالي:

x = data [[#1:#last] , [#1,#last]]

حيث أن اول array تمثل الصفوف التي تريد تقطيعها بينما ابثانية تمثل الاعمدة ، كذلك #1 هي اول صف او عمود تريد اخذه بينما #last هو اخر صف او عمود تريد اخذه.

وتعني العلامة :  الى اخذ كل الصفوف او الاعمدة على حسب المكان الذي توضع فيه.

 

تمّ تعديل بواسطة Ahmed Sharshar
1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن