0
私は与えられた画像に平均フィルタリングを行うためにこのコードを書いています。 それでは、まず2-d配列を初期化します。しかし、特定のセルに値を代入しようとすると、実際に値が列全体に割り当てられます。以下を参照してください:pythonの多次元配列の乗法の振る舞い
def boxBlur(image):
height = len(image)
width = len(image[0])
result = [[0]*(width-2)]*(height-2)
for i in range(height-2):
for j in range(width-2):
mysum = image[i][j] + image[i][j+1] + image[i][j+2] + image[i+1][j] + image[i+1][j+1] + image[i+1][j+2] + image[i+2][j] + image[i+2][j+1] + image[i+2][j+2]
result[i][j] = mysum/9
print result
boxBlur([[7,4,0,1],
[5,6,2,2],
[6,10,7,8],
[1,4,2,0]])
出力のようである:
[[5, 0], [5, 0]]
[[5, 4], [5, 4]]
[[4, 4], [4, 4]]
[[4, 4], [4, 4]]
誰もがこの行動の背後に正確に何を説明することはできますか?
'result = [[0] *(width-2)] *(height-2)'すべての内部リストは同じであることに注意してください。 – PeterE
「結果」を初期化したら、なぜ修正されないのですか? –
これらは配列ではなく*リスト*です。 –