اذهب إلى المحتوى

السؤال

نشر

هذا سؤال سهل ولكن قل أن لدي مصفوفة 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، لكن لا أعرف أين المشكلة.

Recommended Posts

  • 0
نشر

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

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

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

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

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

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

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

  • 0
نشر (معدل)

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

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

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

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

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

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

 

تم التعديل في بواسطة Ahmed Sharshar
  • 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]])
"""

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...