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

السؤال

Recommended Posts

  • 1
نشر

هنالك خطوتين في هذا السؤال الأولى هي إنشاء البيانات العشوائية و الثانية هي عملية إضافة العمود أو الأعمدة الجديدة:

import numpy as np

N = 3

a = np.array([[1, 2,],[3, 4]])
b = np.random.random((N,a.shape[1]))

np.ascontiguousarray(numpy.vstack([a, b]).T)

في البرنامج السابق قمنا بإستيراد numpy و من ثم تعريف عدد القيم الجديدة التي نود إضافتها و مناداة الدالة random من مكتبة numpy.random وبعد تمرير الشكل إستخدمنا vstack لإلصاق القيم الجديدة بالمصفوفة a لكن لتسريع العملية إستخدمنا ascontiguousarray والتي تتعامل مع contiguous array في الذاكرة بالتالي فهي أسرع، لاحظ لنتيجة إختبار سرعات الدوال التالية:

VfSeN.png

  • 0
نشر

يمكنك استخدام append ,تأخذ الدالة append ثلاث معاملات ، الأول والثاني عبارة عن مصفوفات numpy ثنائية الأبعاد والثالث عبارة عن طول المحور المطلوب إلحاقه, ويمكنك استخدامها كالتالي

import numpy as np  
x = np.array([[1,2,3], [4,5,6]]) 
y = np.array([[1], [1]]) 
print(np.append(x, y, axis=1)) 

فيكون الناتج كالتالي

[[1 2 3 1]
 [4 5 6 1]]

 

  • 0
نشر

يمكنك أن تستخدم التابع random لتكوين مصفوفة أحادية من أرقام عشوائية كالتالي:

import numpy as np
a = np.array([
    [1, 2,],
    [3, 4]
])
x = np.random.rand(a.shape[0], 1)	# array([[0.40956956], [0.45251438]])

يمكنك بعد ذلك إستخدام التابع append لدمج المصفوفتين في مصفوفة واحدة كالتالي:

b = np.append(a, x, axis=1)

"""

Output:
array([[1.        , 2.        , 0.99125393],
       [3.        , 4.        , 0.33360925]])

"""

 

  • 0
نشر (معدل)

هناك عدة طرق للقيام بذلك، وتختلف باختلاف زمن التنفيذ كما في الرسم البياني الذي قدمته Reem.
إليك أفضل الطرق للقيام بذلك:

import numpy as np
a = np.array([
    [1, 2,],
    [3, 4]
    ])
n=1
b = np.random.random((n,a.shape[1]))
# طريقة1
np.ascontiguousarray(np.vstack([a.T, b]).T)
# طريقة 2
np.c_[a, b.T]
# طريقة 4
# تكديس المصفوفات  في تسلسل عمودي (حسب الصف). 
np.vstack([a.T, b]).T
# 5 طريقة
# سلسلة من المصفوفات على طول محور موجود
np.concatenate([a.T, b]).T
# 6 طريقة
# 1D إضافة مصفوفة
# يتم إضافتها كعمود
np.column_stack([a, b.T])
# 7 تكديس المصفوفات في تسلسل أفقي أي حسب الصف
np.hstack([a, b.T])
#append و insert يمكن أيضاً استخدام التابع
# لكنهما أقل سرعة
# الخرج
"""
array([[1.        , 2.        , 0.11709763],
       [3.        , 4.        , 0.65841792]])
"""

مثال عن concatenate لتوضيح عمله:

# numpy.concatenate((a1, a2, ...), axis=0, dtype=None)
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])
np.concatenate((a, b), axis=0)
"""array([[1, 2],
       [3, 4],
       [5, 6]])
"""
np.concatenate((a, b.T), axis=1)
"""array([[1, 2, 5],
       [3, 4, 6]])"""

np.concatenate((a, b), axis=None)
"""array(
[1, 2, 3, 4, 5, 6]
)"""

استخدام hstack و vstack يبدو الحل الأسرع (التخزين بشكل contiguous أي تخزين المصفوفات بشكل متجاور بشكل عام بعتبر أسرع من ناحية إجراء العمليات عليه لكن هذه الطرق-أقصد stack بأنواعها- لاتخزن المصفوفات بشكل متجاور، لذا نستخدم التابع ascontiguousarray لتحويلها لكن هذا سيكلفنا المزيد من الوقت وهذا مايتضح لنا في الرسم البياني الذي قدمته Reem، لذا لا أفضله).
أفضل استخدام concat أو column_stack فهو مريح أكثر ومناسب وسرعته مناسبة كما ترى في الرسم البياني الذي أرفقته Reem

 

تم التعديل في بواسطة Ali Haidar Ahmad

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...