English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

قطع المجموعات في NumPy

拆分是连接的反向操作。
连接(Joining)是将多个数组合并为一个,拆分(Spliting)将一个数组拆分为多个。

数组分割的基本函数如下:

函数数组及操作
split将一个数组分割为多个子数组
hsplit将一个数组水平分割为多个子数组(按列)
vsplit将一个数组垂直分割为多个子数组(按行)

numpy.split

numpy.split 函数沿特定的轴将数组分割为子数组,格式如下:

numpy.split(ary, indices_or_sections, axis)

شرح المعلمات:

ary: المصفوفة التي يتم تقسيمهاindices_or_sections: إذا كان عددًا صحيحًا، يتم تقسيمه بشكل متساوٍ، وإذا كان مصفوفة، فإنها تمثل المواقع التي يتم تقسيمها على طول المحور axis: أية مقياس لتقسيمه، افتراضياً 0، تقسيم أفقي. عند 1، تقسيم عمودي

import numpy as np
a = np.arange(15)
print('المجموعة الأولى:')
print(a)
print('\n')
اطبع('تقسيم المصفوفة إلى ثلاثة أجزاء متساوية الحجم: ')
b = np.split(a, 5)
print(b)
print('\n')
اطبع('تقسيم الموقع في مصفوفة أحادية الأبعاد: ')
b = np.split(a, [4, 7])
print(b)

النتيجة هي:

المجموعة الأولى:
[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
تقسيم المصفوفة إلى ثلاثة أجزاء متساوية الحجم:
[array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8]), array([9, 10, 11]), array([12, 13, 14])]
تقسيم الموقع في مصفوفة أحادية الأبعاد:
[array([0, 1, 2, 3]), array([4, 5, 6]), array([7, 8, 9, 10, 11, 12, 13, 14])]

عندما تكون العناصر في المصفوفة أقل من الكمية المطلوبة، يجب استخدامدالة array_splitسيتم التكيف من نهاية المصفوفة.

import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6])
newarr = np.array_split(arr, 4)
اطبع(newarr)

النتيجة هي:

[array([1, 2]), array([3, 4]), array([5]), array([6])]
ملاحظة:باستخدام طريقة split()، عندما تكون العناصر في المصفوفة الأصلية أقل من اللازم لتقسيمها، فإنها لن تقوم بتعديل العناصر، مثل المثال السابق، يعمل array_split() بشكل طبيعي، ولكن split() سيفشل.

numpy.hsplit

استخدام دالة numpy.hsplit لتقسيم مصفوفة أفقياً، من خلال تحديد عدد المصفوفات التي سيتم عودتها بنفس الشكل لتقسيم المصفوفة الأصلية.

import numpy as np
harr = np.floor(10 * np.random.random((2, 8)))
اطبع('العدد الأصلي: ')
اطبع(harr)
 
اطبع('مقسوم: ')
اطبع(np.hsplit(harr, 4))

النتيجة هي:

المجموعة الأصلية:}}
[[7. 9. 2. 6. 8. 7. 4. 5.]
 [2. 5. 3. 5. 9. 4. 1. 3.]]
بعد التقسيم:
[ماتريكس([[7.، 9.]
       [2.، 5.]])، ماتريكس([[2.، 6.]
       [3.، 5.]])، ماتريكس([[8.، 7.]
       [3.، 5.]])، ماتريكس([[4.، 5.]
       [1.، 3.]])]

numpy.vsplit

numpy.vsplit يقوم بقطع بشكل عمودي، ويستخدم بنفس الطريقة التي يستخدمها hsplit.

import numpy as np
a = np.arange(16).reshape(4, 4)
print('المجموعة الأولى:')
print(a)
print('\n')
print('القطع العمودي:')
b = np.vsplit(a, 2)
print(b)

النتيجة هي:

المجموعة الأولى:
[[0 1 2 3]
 [4 5 6 7]
 [8 9 10 11]
 [12 13 14 15]]
القطع العمودي:
[ماتريكس([[0، 1، 2، 3],
       [4، 5، 6، 7]])، ماتريكس([[8، 9، 10، 11]،
       [12، 13، 14، 15]])]