سؤال

وأنا أبحث لإنشاء مصفوفة 2D ومن الأعداد الصحيحة مع متماثل معالجة (أي مصفوفة [2،3] ومصفوفة [3،2] سيعود نفس القيمة) في بيثون. فإن الأعداد الصحيحة يكون الجمع والطرح القيام به عليها، واستخدامها لإجراء مقارنات منطقية. كانت فكرتي الأولية لإنشاء عدد صحيح كائنات في خط الهجوم ومحاولة لملء قائمة من القوائم مع بعض يعادل الثعبان من المؤشرات. لست متأكدا من كيفية القيام بذلك، وإن كان. ما هي أفضل طريقة لتنفيذ ذلك، ويجب أن استخدمه القوائم أو بنية بيانات أخرى؟

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

المحلول

وهناك طريقة أبسط وأكثر نظافة هو مجرد استخدام القاموس مع الصفوف فرزها كمفاتيح. في الصفوف تتوافق مع مؤشر المصفوفة الخاصة بك. تجاوز __getitem__ و__setitem__ للوصول إلى القاموس من الصفوف التي تم فرزها. وهنا فئة سبيل المثال:

class Matrix(dict):
    def __getitem__(self, index):
        return super(Matrix, self).__getitem__(tuple(sorted(index)))
    def __setitem__(self, index, value):
        return super(Matrix, self).__setitem__(tuple(sorted(index)), value)

وثم استخدامها مثل هذا:

>>> matrix = Matrix()
>>> matrix[2,3] = 1066
>>> print matrix
{(2, 3): 1066}
>>> matrix[2,3]
1066
>>> matrix[3,2]
1066
>>> matrix[1,1]
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "z.py", line 3, in __getitem__
    return super(Matrix, self).__getitem__(tuple(sorted(index)))
KeyError: (1, 1)

نصائح أخرى

وغولوب وفان القرض في "مصفوفة الحسابية" كتاب الخطوط العريضة لنظام العنونة ممكنا:

وأنت حزمة البيانات في لناقلات والحصول على النحو التالي، على افتراض ط => ي:

a_ij = A.vec((j-1)n - j(j-1)/2 + i)    

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

وتحتاج فقط لتخزين المثلث السفلي من المصفوفة. وعادة ما يتم ذلك مع ن واحد (ن + 1) / 2 قائمة طول. ستحتاج إلى تفرط في طريقة __getitem__ لتفسير ما يعني دخول.

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