Fahmy Mostafa نشر 24 يوليو 2021 أرسل تقرير نشر 24 يوليو 2021 هل هناك طريقة لتقسيم مصفوفة ثنائية الأبعاد في numpy إلى مصفوفات ثنائية الأبعاد أصغر؟ أي يكون لدي مصفوفة كالتالي: [[1,2,3,4], [5,6,7,8]] وأريد تحويلها إلى التالي: [[1,2], [3,4], [5,6], [7,8]] لذلك أريد أساسًا تقطيع مصفوفة 2 × 4 إلى مصفوفتين 2 × 2. هل يمكنني عمل ذلك من خلال Numpy؟ 1 اقتباس
0 Ali Haidar Ahmad نشر 24 يوليو 2021 أرسل تقرير نشر 24 يوليو 2021 (معدل) في نمباي يمكنك القيام بذلك من خلال التابع split كالتالي: import numpy as np a = np.array([[1,2,3,4], [5,6,7,8]]) a1 = np.split(a,2,axis=1) التابع split يقوم بقسّم مصفوفة إلى مصفوفات فرعية متعددة. وله الشكل التالي: numpy.split(ary, indices_or_sections, axis=0) # ary: المصفوفة المراد تقسيمها إلى مصفوفات فرعية # indices_or_sections: التقسيمات. ويقبل عدد صحيح أو مصفوفة ببعد واحد # axis: تمثل المحورالذي نريد التقسيم على أساسه وافتراضياً يساوي 0 بالنسبة للوسيط الثاني الخاص بالتقسيمات، فإذا كانت التقسيمات عدداً صحيحاً N ، فسيتم تقسيم المصفوفة إلى مصفوفات N متساوية على طول المحور. تم التعديل في 24 يوليو 2021 بواسطة Ali Haidar Ahmad 1 اقتباس
0 عبدالله عبدالرحمن11 نشر 24 يوليو 2021 أرسل تقرير نشر 24 يوليو 2021 يجب أن تكون قادرًا على تقسيم المصفوفة إلى "كتل" باستخدام reshape و swapaxes: def blockshaped(arr, nrows, ncols): h, w = arr.shape assert h % nrows == 0, "{} rows is not evenly divisble by {}".format(h, nrows) assert w % ncols == 0, "{} cols is not evenly divisble by {}".format(w, ncols) # إرجاع المصفوفة المقسمة return (arr.reshape(h//nrows, nrows, -1, ncols) .swapaxes(1,2) .reshape(-1, nrows, ncols)) حيث يقوم بتحويل c c = np.arange(24).reshape((4,6)) print(c) # [[ 0 1 2 3 4 5] # [ 6 7 8 9 10 11] # [12 13 14 15 16 17] # [18 19 20 21 22 23]] إلى print(blockshaped(c, 2, 3)) # [[[ 0 1 2] # [ 6 7 8]] # [[ 3 4 5] # [ 9 10 11]] # [[12 13 14] # [18 19 20]] # [[15 16 17] # [21 22 23]]] 1 اقتباس
0 Ahmed Sharshar نشر 24 يوليو 2021 أرسل تقرير نشر 24 يوليو 2021 يوجد اكثر من طريقة لتقسيم مصفوفة في numpy: 1) اذا كانت المصفوفة احادية الابعاد 1-D: لو عندنا مصفوفة احادية كالتالي: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) يمكن تقسيمها الي 5 مصفوفات متساوية باستخدام الكود: import numpy as np np.split(x, 5) ويكون الناتج: [array([0, 1]), array([2, 3]), array([4, 5]), array([6, 7]), array([8, 9])] 2) تقسيم مصفوفة في ثناية الابعاد 2-D: في السؤال المطروح، اذا كان لدينا المصفوفة : [[1,2,3,4], [5,6,7,8]] يمكن تقسيمه عن طريق الكود التالي: X = np.array([[1,2,3,4], [5,6,7,8]]) X_new = np.split(a,2,axis=1) يمكن كذلك تقسيمها لعدد من المصفوفات غير متساوية الحجم اذا اردنا عن طريق استخدام ال indices: np.split(X, [2,3,3]) هذا سوف يقسمهم الي 3 مصفوفات، اولهما تحتوي على عنصرين والثانيه والثالثة تحتوي كل منهما على ثلاث عناصر كالتالي: [array([1, 2]), array([3, 4, 5]), array([6, 7, 8])] هذا يوفر امكانية التقسيم حتى لقطع غير متساوية وبشكل عام يمكن استخدام np.split كالتالي: numpy.split(arary, indices, axis=0) >>>array: ادخال المصفوفة المارد تقسيمها >>>indices: عدد المصفوفات المراد القسيم اليها، يمكن ايضا ادخال عدد من الارقام (كما في المثال السابق) لتقسيمها لقطع غير متساوية >>>axis: المحور الذي يراد التقيم عليه، افتراضيا 0 وهو يمثل الصفوف او 1 وهو يمثل الاعمدة 1 اقتباس
السؤال
Fahmy Mostafa
هل هناك طريقة لتقسيم مصفوفة ثنائية الأبعاد في numpy إلى مصفوفات ثنائية الأبعاد أصغر؟
أي يكون لدي مصفوفة كالتالي:
وأريد تحويلها إلى التالي:
[[1,2], [3,4], [5,6], [7,8]]
لذلك أريد أساسًا تقطيع مصفوفة 2 × 4 إلى مصفوفتين 2 × 2. هل يمكنني عمل ذلك من خلال Numpy؟
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.