سؤال

إذا كنت تقوم بإنشاء 1d مجموعة في بايثون هل هناك أي فائدة استخدام NumPy الطرد ؟

هل كانت مفيدة؟

المحلول

كل هذا يتوقف على ما كنت تنوي القيام به مع مجموعة.إذا كان كل ما تفعله هو إنشاء صفائف بسيطة أنواع البيانات والقيام I/O ، مجموعة الوحدة سوف تفعل ما يرام.

إذا من ناحية أخرى كنت تريد أن تفعل أي نوع من الحسابات العددية ، مجموعة وحدة لا تقدم أي مساعدة في ذلك. NumPySciPy) تعطيك مجموعة واسعة من العمليات بين المصفوفات و الدوال الخاصة التي هي مفيدة ليس فقط من أجل العمل العلمي ولكن أشياء مثل الصور المتقدمة التلاعب أو في أي شيء حيث كنت في حاجة لأداء كفاءة العمليات الحسابية مع كميات كبيرة من البيانات.

Numpy هو أيضا أكثر مرونة ، مثلوهو يدعم صفائف من أي نوع من الثعبان الكائنات ، وهي أيضا قادرة على التفاعل "أصلا" مع الكائنات الخاصة بك إذا كانت تتفق مع مجموعة واجهة.

نصائح أخرى

صغيرة إلباس الحذاء لصالح أيا كان قد تجد هذه مفيدة (عقب ممتازة الجواب بواسطة @dF.):

import numpy as np
from array import array

# Fixed size numpy array
def np_fixed(n):
    q = np.empty(n)
    for i in range(n):
        q[i] = i
    return q

# Resize with np.resize
def np_class_resize(isize, n):
    q = np.empty(isize)
    for i in range(n):
        if i>=q.shape[0]:
            q = np.resize(q, q.shape[0]*2)        
        q[i] = i
    return q    

# Resize with the numpy.array method
def np_method_resize(isize, n):
    q = np.empty(isize)
    for i in range(n):
        if i>=q.shape[0]:
            q.resize(q.shape[0]*2)
        q[i] = i
    return q

# Array.array append
def arr(n):
    q = array('d')
    for i in range(n):
        q.append(i)
    return q

isize = 1000
n = 10000000

الإخراج يعطي:

%timeit -r 10 a = np_fixed(n)
%timeit -r 10 a = np_class_resize(isize, n)
%timeit -r 10 a = np_method_resize(isize, n)
%timeit -r 10 a = arr(n)

1 loop, best of 10: 868 ms per loop
1 loop, best of 10: 2.03 s per loop
1 loop, best of 10: 2.02 s per loop
1 loop, best of 10: 1.89 s per loop

يبدو أن مجموعة.مجموعة أسرع قليلا و 'api' يوفر لك بعض المتاعب, ولكن إذا كنت بحاجة إلى أكثر من مجرد تخزين الزوجي ثم numpy.تغيير ليس خيارا سيئا بعد كل شيء (إذا ما استخدمت بشكل صحيح).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top