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

السؤال

نشر

لدي مصفوفتين numpy كالتالي:

x = np.array([0, 1, 2])
y = np.array([3, 4, 5])

ما أريده هو عمل مصفوفة جديدة تكون عبارة عن دمج المصفوفتين كالتالي:

result = np.array([
    [0, 3],
    [0, 4],
    [0, 5],
    [1, 3],
    [1, 4],
    [1, 5],
    [2, 3],
    [2, 4],
    [2, 5]
])

كيف يمكنني عمل ذلك من خلال مكتبة numpy لإتمام المهمة بأسرع ما يكون؟

Recommended Posts

  • 1
نشر

في الإصدار الأحدث من numpy 1.8.x ،لديك دالة  numpy.meshgrid والتي توفر تنفيذًا أسرع بكثير:

دالة numpy.meshgrid() كانت تستخدم لتكون ثنائية الأبعاد فقط ، والآن أصبحت قادرة على ND. في هذا المثال ، ثلاثي الأبعاد:

In [115]:

%timeit np.array(np.meshgrid([1, 2, 3], [4, 5], [6, 7])).T.reshape(-1,3)
10000 loops, best of 3: 74.1 µs per loop
In [116]:

np.array(np.meshgrid([1, 2, 3], [4, 5], [6, 7])).T.reshape(-1,3)

Out[116]:
array([[1, 4, 6],
       [1, 5, 6],
       [2, 4, 6],
       [2, 5, 6],
       [3, 4, 6],
       [3, 5, 6],
       [1, 4, 7],
       [1, 5, 7],
       [2, 4, 7],
       [2, 5, 7],
       [3, 4, 7],
       [3, 5, 7]])

 

  • 0
نشر (معدل)

يمكنك تنفيذ الجداءالديكارتي باستخدام التابع التالي اعتماداً على الدالة meshgrid في مكتبة نمباي :

import numpy as np
x = np.array([0, 1, 2])
y = np.array([3, 4, 5])
# تعريف تابع يقوم بعملية الجداء الديكارتي
def cartesian(*arrays):
    g = np.meshgrid(*arrays)        
    coord = [x.ravel() for x in g]
    p = np.vstack(coord).T
    return p
# استدعاء التابع وطباعة الخرج
print(cartesian(x,y))
# الخرج
'''
[[0 3]
 [1 3]
 [2 3]
 [0 4]
 [1 4]
 [2 4]
 [0 5]
 [1 5]
 [2 5]]
'''

 

تم التعديل في بواسطة Ali Haidar Ahmad
  • 0
نشر

يمكن حل هذه المشكلة بإستخدام الدالة product في المصفوفات و دالة itertools التي تسمح بالمرور على عناصر المصفوفات واحد تلو الأخر:

import numpy as np
#إنشاء المصفوفات
x = np.array([0, 1, 2])
y = np.array([3, 4, 5])
# إنشاء مصفوفة فارغة لإضافة الناتج فيها لاحقا
all = []

# إستخدام الحلقات مع دالة الضرب لإيجاد الناتج و إضافته للمصفوفة 
for r in itertools.product(x, y): 
  all.append([r[0],r[1]])  

np.array(all)

 

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...