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

كيفية إضافة أعمدة وصفوف إلى مصفوفة فارغة في Numpy

Fahmy Mostafa

السؤال

لا يمكنني معرفة كيفية استخدام array أو matrix بالطريقة التي أستخدم بها القائمة list عادةً. أريد إنشاء array فارغة ثم إضافة عمود (أو صف) إليها في المرة الواحدة مثلما نفعل عندما نستخدم التابع append على القوائم

على سبيل المثال نقوم بالتالي في حالة إستخدام القوائم lists:

lst = []
for item in data:
    lst.append(item)

كيف يمكننا القيام بذلك في Numpy؟

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

Recommended Posts

  • 1

لإضافة عمود إلى مصفوفتك استدعي numpy.append(arr, values, axis=1) ، انظر للمثال التالي:

import numpy as np
arr = np.zeros((3,2))
print(arr)
"""
[[0. 0.]
 [0. 0.]
 [0. 0.]]
"""
new_column = [[3],[3], [6]]
arr = np.append(arr, new_column, axis=1)
arr
"""
array([[0., 0., 3.],
       [0., 0., 3.],
       [0., 0., 6.]])
"""

ولإضافة أسطر، فقط نغير المحور:

import numpy as np
arr = np.zeros((3,2))
print(arr)
"""
[[0. 0.]
 [0. 0.]
 [0. 0.]]
"""
new_row = [[3,2]]
arr = np.append(arr, new_row, axis=0)
arr
"""
array([[0., 0.],
       [0., 0.],
       [0., 0.],
       [3., 2.]])
"""

أو يمكنك استخدام numpy.insert(arr, idx, values, axis=1):

import numpy as np
arr = np.zeros((3,2))
print(arr)
"""
[[0. 0.]
 [0. 0.]
 [0. 0.]]
"""
new_column = [[3,2,1]]
arr=np.insert(arr, 1, new_column, axis=1)
print(arr)
"""
[[0. 3. 0.]
 [0. 2. 0.]
 [0. 1. 0.]]
"""

 

تم التعديل في بواسطة Ali Haidar Ahmad
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

لإنشاء مصفوفة فارغة متعددة الأبعاد في NumPy على سبيل المثال ، مصفوفة ثنائية الأبعاد m * n فيمكنك القيام بالامر كالتالي

import numpy as np

n = 2
X = np.empty(shape=[0, n])

for i in range(5):
    for j  in range(2):
        X = np.append(X, [[i, j]], axis=0)

print X

سوف يكون ناتج الطباعة كالتالي

[[ 0.  0.]
 [ 0.  1.]
 [ 1.  0.]
 [ 1.  1.]
 [ 2.  0.]
 [ 2.  1.]
 [ 3.  0.]
 [ 3.  1.]
 [ 4.  0.]
 [ 4.  1.]]

 

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

  • 0
بتاريخ 1 ساعة قال Ali Haidar Ahmad:

لإضافة عمود إلى مصفوفتك استدعي numpy.append(arr, values, axis=1) ، انظر للمثال التالي:


import numpy as np
arr = np.zeros((3,2))
print(arr)
"""
[[0. 0.]
 [0. 0.]
 [0. 0.]]
"""
new_column = [[3],[3], [6]]
arr = np.append(arr, new_column, axis=1)
arr
"""
array([[0., 0., 3.],
       [0., 0., 3.],
       [0., 0., 6.]])
"""

ولإضافة أسطر، فقط نغير المحور:


import numpy as np
arr = np.zeros((3,2))
print(arr)
"""
[[0. 0.]
 [0. 0.]
 [0. 0.]]
"""
new_row = [[3,2]]
arr = np.append(arr, new_row, axis=0)
arr
"""
array([[0., 0.],
       [0., 0.],
       [0., 0.],
       [3., 2.]])
"""

أو يمكنك استخدام numpy.insert(arr, idx, values, axis=1):


import numpy as np
arr = np.zeros((3,2))
print(arr)
"""
[[0. 0.]
 [0. 0.]
 [0. 0.]]
"""
new_column = [[3,2,1]]
arr=np.insert(arr, 1, new_column, axis=1)
print(arr)
"""
[[0. 3. 0.]
 [0. 2. 0.]
 [0. 1. 0.]]
"""

 

  • تعديل:لم انتبه لكامل سؤالك:

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

import numpy
arr = numpy.zeros(shape=(3,2))
arr
"""
array([[0., 0.],
       [0., 0.],
       [0., 0.]])
"""
# إضافة عمود
arr[:,0]=[3,1,2]
arr
"""
array([[3., 0.],
       [1., 0.],
       [2., 0.]])
"""
arr[:,1]=[4,1,2]
arr
"""
array([[3., 4.],
       [1., 1.],
       [2., 2.]])
"""

وهو حل قد يكون مربك قليلاً ولايحقق ماطلبته (أنت تريد البدء من مصفوفة فارغة تماماً أي [] كما في القوائم)، لذا الآن إليك خدعتي الخاصة، التي تمكنك من التلاعب كيفما شئت. سأعطيك مثال عليها ، أولاً لإضافة عناصر للمصفوفة عمود عمود بدءاً من مصفوفة فارغة أي []:

# تعريف مصفوفة ثنائية فارغة ب 3 أسطر
X = np.array([[],[],[]])
X.shape #(3, 0)
X=np.append(X, [[1],[2],[4]], axis = 1)
X.shape # (3, 1)
X
"""
array([[1.],
       [2.],
       [4.]])
"""
X=np.append(X, [[3],[5],[6]], axis = 1)
X.shape # (3, 2)
"""
array([[1., 3.],
       [2., 5.],
       [4., 6.]])
"""

حيث يجب عليك تحديد عدد الأسطر فقط، في المصفوفة. وإذا وجدت أن إضافة الأسطر يدوياً أمر متعب يمكنك القيام بما يلي:

#سطر  n إضافة 
X = np.array([[]])
# مثلاً تريد أن تكون عدد أسطرك 100
for i in range(99):
    X=np.append(X, [[]], axis = 0)
X.shape # (100, 0)
"""
الآن يمكنك إضافة ماتريده من أعمدة أو أسطر اعتماداً على هذا الأسلوب
"""

أما إذا أردت الإضافة سطر سطر، فقم بالتغيير البسيط التالي:

#عمود  n إضافة 
# أو بمعنى آخر عدد الأعمدة
X = np.array([[]]) # فقط نقوم بتعريف مصفوفة فارغة كما أردت
# مثلاً تريد أن يكون عدد أعمدتك 100
for i in range(99):
    X=np.append(X, [[]], axis = 0)
(X.reshape(0,100)).shape # (0, 100)
"""
الآن يمكنك إضافة ماتريده من أسطر اعتماداً على هذا الأسلوب
"""

مثال:

X = np.array([[],[]]).reshape(0,2)
X=np.append(X, [[1,5]], axis = 0)
X
#array([[1., 5.]])
X.shape # (1, 2)

 

تم التعديل في بواسطة Ali Haidar Ahmad
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • -1

يتم تخزين صفائف numpy في كتل متجاورة من الذاكرة. إذا كنت ترغب في إضافة صفوف أو أعمدة إلى array موجودة، يجب نسخ array بأكملها إلى كتلة جديدة من الذاكرة، وإنشاء فجوات للعناصر الجديدة التي سيتم تخزينها. هذا غير فعال للغاية إذا فعلت مرارا وتكرارا بناء صفيف.

في حالة إضافة الصفوف، فإن أفضل رهان الخاص بك هو إنشاء مجموعة كبيرة حيث ستكون مجموعة البيانات الخاصة بك في نهاية المطاف، ثم قم بتعيين البيانات إليها في الصف عبر الصف أنظر المثال التالي:

>>> import numpy
>>> a = numpy.zeros(shape=(5,2))
>>> a
array([[ 0.,  0.],
   [ 0.,  0.],
   [ 0.,  0.],
   [ 0.,  0.],
   [ 0.,  0.]])
>>> a[0] = [1,2]
>>> a[1] = [2,3]
>>> a
array([[ 1.,  2.],
   [ 2.,  3.],
   [ 0.,  0.],
   [ 0.,  0.],
   [ 0.,  0.]])

وهذه افضل طريقة يمكنك أستخدام المساحة المؤقتة memory بحيث تضمن اداء المهمة وتكون سريعة كذلك.

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

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...