كيف يمكنني إضافة حلقة حراسة إلى مصفوفة في Numpy؟

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

  •  21-08-2019
  •  | 
  •  

سؤال

استخدام نومبي, ، تحتوي المصفوفة A على صفوف N و M ، وأريد إضافة حلقة حراسة إلى Matrix A. هذه الحلقة الحارس هي كل شيء.

ماذا علي أن أفعل؟ استخدم Reshape؟ لكن العنصر لا يكفي لصنع مصفوفة N+1 M+1.

أو الخ؟

شكرا مقدما

أعني حلقة إضافية من الخلايا التي تحتوي دائمًا على 0 مصفوفة محيطة. مثل Matrix A.
هل كانت مفيدة؟

المحلول

المتابعة على الخاص بك تعليق:

>>> import numpy
>>> a = numpy.array(range(9)).reshape((3,3))
>>> b = numpy.zeros(tuple(s+2 for s in a.shape), a.dtype)
>>> b[tuple(slice(1,-1) for s in a.shape)] = a
>>> b
array([[0, 0, 0, 0, 0],
       [0, 0, 1, 2, 0],
       [0, 3, 4, 5, 0],
       [0, 6, 7, 8, 0],
       [0, 0, 0, 0, 0]])

نصائح أخرى

هذه نسخة أقل عمومية ولكن أسهل في فهمها إجابة أليكس:

>>> a = numpy.array(range(9)).reshape((3,3))
>>> a
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> b = numpy.zeros(a.shape + numpy.array(2), a.dtype)
>>> b
array([[0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0]])
>>> b[1:-1,1:-1] = a
>>> b
array([[0, 0, 0, 0, 0],
       [0, 0, 1, 2, 0],
       [0, 3, 4, 5, 0],
       [0, 6, 7, 8, 0],
       [0, 0, 0, 0, 0]])

هذا السؤال قديم الآن ، لكني أريد فقط تنبيه الناس العثور عليه Numpy لديه وظيفة pad هذا ينجز هذا بسهولة الآن.

import numpy as np
a = np.array(range(9)).reshape((3, 3))
a
Out[15]: 
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

a = np.pad(a, pad_width=((1,1),(1,1)), mode='constant', constant_values=0)
a
Out[16]: 
array([[0, 0, 0, 0, 0],
       [0, 0, 1, 2, 0],
       [0, 3, 4, 5, 0],
       [0, 6, 7, 8, 0],
       [0, 0, 0, 0, 0]])
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top