0
N次元配列から与えられたサイズの一部と与えられた位置を切り取る必要があります。 部品が大きい場合は、指定されたサイズになるようにゼロを埋め込む必要があります。アレイからpiceを切り取り、0で埋めてください
例は簡潔にするために2Dで示しています。
所与マトリックス:私は[2,4]の部分をカットする
[[1 8 3 3 8]
[5 8 6 7 6]
[8 3 5 6 5]
[2 6 2 4 6]
[6 5 3 7 4]]
は、インデックス(1,2)から出発して、Iカット 部分のサイズのために十分な大きさではないので、パディングゼロを含む が必要です。 指名手配結果:
[[6 7 6 0]
[5 6 5 0]]
が、私はそれを行うには醜いではなくN-DIMコードを書くために管理します。
# set example numbers
matrix = numpy.random.randint(low=1, high=9, size=(5,5))
matrix_size = np.array(matrix.shape)
# size of the part we want to have in the end
size = np.array([2, 4])
# starting point of the cut
mini = [1, 2]
#calculating max index (in the given matrix) for the part we want to cut
maxi = np.add(size - 1 , mini)
cut_max_ind = np.minimum(maxi, matrix_size - 1) + 1
# copy from matrix to cut
# ??? a way to generalize it for N-dim ???
cut = matrix[mini[0]:cut_max_ind[0], mini[1]:cut_max_ind[1]]
#culculate the padding size
padding = np.add(matrix_size - 1, maxi*-1)
padding_size = np.minimum(np.zeros((matrix.ndim), dtype=np.uint8), padding) * -1
for j in range(0, matrix.ndim):
if (padding_size[j]):
pad_width = size
pad_width[j] = padding_size[j]
pad_pice = np.zeros((pad_width), dtype = np.uint8)
cut = np.append(cut, pad_pice, axis = j)
print "matrix"
print matrix
print "cut"
print cut
改善と一般化のアイデアはありますか?
すごい素晴らしい答えです。完璧に動作します。ありがとう – Naomi
は3Dに対しても完全に機能します。小さなエラー:out [out_idx] =配列[in_idx](not a) – Naomi
任意の数のディメンションで動作します。 :-)ありがとう、それを修正しました。 –