Fahmy Mostafa نشر 5 يوليو 2021 أرسل تقرير نشر 5 يوليو 2021 لدي مصفوفة Numpy كبيرة تحتوي على عمودين فقط كالتالي: a = np.array([ [1, 2,], [3, 4] # ... ]) كيف يمكنني إضافة عمود لهذه المصفوفة بقيم عشوائية باستخدام Numpy للحصول على أسرع نتيجة؟ 2 اقتباس
1 ريم المهدي نشر 6 يوليو 2021 أرسل تقرير نشر 6 يوليو 2021 هنالك خطوتين في هذا السؤال الأولى هي إنشاء البيانات العشوائية و الثانية هي عملية إضافة العمود أو الأعمدة الجديدة: 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 في الذاكرة بالتالي فهي أسرع، لاحظ لنتيجة إختبار سرعات الدوال التالية: اقتباس
0 محمد أبو عواد نشر 5 يوليو 2021 أرسل تقرير نشر 5 يوليو 2021 يمكنك استخدام 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 سامح أشرف نشر 5 يوليو 2021 أرسل تقرير نشر 5 يوليو 2021 يمكنك أن تستخدم التابع 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 عبدالباسط ابراهيم نشر 6 يوليو 2021 أرسل تقرير نشر 6 يوليو 2021 يمكنك أيضاً استخدام hstack وسيكون كالتالي أولاً توليد قيم عشوائية import numpy as np a = np.array([ [1, 2,], [3, 4] ]) x = np.random.rand(a.shape[0], 1) ثانياً إضافة هذه القيم من خلال ال hstack b = np.hstack((a, x)) اقتباس
0 Ali Haidar Ahmad نشر 6 يوليو 2021 أرسل تقرير نشر 6 يوليو 2021 (معدل) هناك عدة طرق للقيام بذلك، وتختلف باختلاف زمن التنفيذ كما في الرسم البياني الذي قدمته 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 تم التعديل في 6 يوليو 2021 بواسطة Ali Haidar Ahmad 1 اقتباس
السؤال
Fahmy Mostafa
لدي مصفوفة Numpy كبيرة تحتوي على عمودين فقط كالتالي:
كيف يمكنني إضافة عمود لهذه المصفوفة بقيم عشوائية باستخدام Numpy للحصول على أسرع نتيجة؟
5 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.