مخازن بروتوكول Google ، HDF5 ، مقارنة Numpy (نقل البيانات)

StackOverflow https://stackoverflow.com/questions/4125855

  •  29-09-2019
  •  | 
  •  

سؤال

أحتاج إلى مساعدة لاتخاذ القرار. لدي حاجة إلى نقل بعض البيانات في طلبي وعلي اتخاذ خيار بين هذه التقنيات الثلاثة. لقد قرأت عن جميع التقنيات قليلاً (البرامج التعليمية ، الوثائق) ولكن ما زلت لا أستطيع أن تقرر ...

كيف يقارنون؟

أحتاج إلى دعم البيانات الوصفية (القدرة على تلقي الملف وقراءته دون أي معلومات/ملفات إضافية) ، فإن عمليات القراءة/الكتابة السريعة ، ستكون القدرة على تخزين البيانات الديناميكية زائد (مثل كائنات Python)

الأشياء التي أعرفها بالفعل:

  • نومبي سريع جدًا ولكن لا يمكن تخزين البيانات الديناميكية (مثل كائنات Python). (ماذا عن البيانات الوصفية؟)
  • HDF5 سريع للغاية ، ويدعم سمات مخصصة ، سهل الاستخدام ، ولكن لا يمكن تخزين كائنات بيثون. كما يقوم HDF5 بتسلسل بيانات numpy أصليًا ، لذلك ، IMHO ، Numpy ليس له مزايا على HDF5
  • جوجل بروتوكول المخازن المؤقتة دعم التوصيف الذاتي أيضًا ، سريع جدًا (لكن دعم Python ضعيف في الوقت الحالي ، بطيء وعربات التي تجرها الدواب). يمكن تخزين البيانات الديناميكية. MINUSES - لا تعمل التوصية الذاتي من Python والرسائل التي تكون> = 1 ميغابايت هي التسلسل/إزالة التسلسل غير سريع للغاية (اقرأ "بطيء").

ملاحظة: البيانات التي أحتاج إلى نقلها هي "نتيجة عمل" من Numpy/Scipy (المصفوفات ، صفائف من الهياكل المعقدة ، إلخ)

تحديث: الوصول عبر اللغة المطلوبة (C/C ++/Python)

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

المحلول

يبدو أن هناك تناقضًا طفيفًا في سؤالك - فأنت تريد أن تكون قادرًا على تخزين كائنات Python ، لكنك تريد أيضًا الوصول إلى C/C ++. أعتقد أنه بغض النظر عن الخيار الذي تختاره ، ستحتاج إلى تحويل هياكل بيانات Python الفاخرة إلى هياكل أكثر ثابتة مثل المصفوفات.

إذا كنت بحاجة إلى وصول عبر اللغة ، فأنا أقترح استخدام HDF5 لأنه تنسيق ملف مصمم خصيصًا ليكون مستقلاً عن اللغة ، ونظام التشغيل ، بنية النظام (على سبيل المثال ، يمكن أن يتحول بين الكبار والإنديان تلقائيًا تلقائيًا ) ويهدف على وجه التحديد إلى المستخدمين الذين يقومون بالحوسبة العلمية/العددية. لا أعرف الكثير عن مخازن بروتوكول Google ، لذلك لا يمكنني التعليق كثيرًا على ذلك.

إذا قررت الذهاب مع HDF5 ، فإنني أوصي أيضًا باستخدامك H5py بدلا من pytables. وذلك لأن Pytables ينشئ ملفات HDF5 مع مجموعة كبيرة من البيانات الوصفية الإضافية التي تجعل قراءة البيانات في C/C ++ أكثر قليلاً من الألم ، في حين أن H5PY لا يخلق أيًا من هذه الإضافات. يمكنك العثور على مقارنة هنا, ، ويعطون أيضًا رابطًا إلى الأسئلة الشائعة عن Pytables لعرضهم في هذا الشأن حتى تتمكن من تحديد ما يناسب احتياجاتك بشكل أفضل.

شكل آخر يشبه إلى حد كبير HDF5 Netcdf. يحتوي هذا أيضًا على روابط Python ، ومع ذلك ليس لدي أي خبرة في استخدام هذا التنسيق ، لذا لا يمكنني التعليق حقًا إلى أبعد من الإشارة إلى أنه موجود ويستخدم أيضًا على نطاق واسع في الحوسبة العلمية.

نصائح أخرى

لا أعرف عن HDF5 ، لكنك يستطيع تخزين كائنات Python في صفائف Numpy ، ستفقد كل الوظائف المهمة من خلال عدم سماع العمليات على مستوى C التي سيتم تنفيذها على الصفيف.

In [17]: x = np.zeros(10, dtype=np.object)
In [18]: x[3] = {'pants', 10}
In [19]: x
Out[19]: array([0, 0, 0, set([10, 'pants']), 0, 0, 0, 0, 0, 0], dtype=object)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top