문제는 두 번째 축의 인덱스 인 x[1,x[0,:]+1]
에 있습니다. x[0,:]+1
은 이 x의 차원보다 큰 [1 2 3 4 5 6 7 8 9 10]
입니다. 9
마지막 요소이며 -1
의 인덱스가 같은 x[1,x[0,:]-1]
의 경우
는 2 축의 지수는 당신이
[9 0 1 2 3 4 5 6 7 8]
을 받고 결국,
[-1 0 1 2 3 4 5 6 7 8 9]
입니다. 끝에있는 두 번째 요소의 인덱스는 -2입니다. 본질적으로 무슨 일이 일어나고 있는지
np.where((x[0,:]<5)&(x[0,:]>0),x[1,x[0,:]-1],x[1,:])
및
x[0,:]=[0 1 2 3 4 5 6 7 8 9]
와
는 x[0,0]
가 0이고 x[0,:]<5)&(x[0,:]>0
이 False
때문에 첫 번째 셀 양식 x[1,:]
을 촬영한다는 것입니다. 다음 네 요소는 x[1,x[0,:]-1]
에서 가져옵니다. 나머지는 x[1,:]
입니다. 마지막으로 결과는 [0 0 1 2 3 4 5 6 7 8]
그냥 1 셀의 슬라이딩 창의 OK 표시 될 수 있지만, 함께 거 놀라운 당신의
:
>>> np.where((x[0,:]<5)&(x[0,:]>0),x[1,x[0,:]-2],x[1,:])
array([0, 9, 0, 1, 2, 5, 6, 7, 8, 9])
하는 두 세포의 창으로 이동하려고 할 때 . 우리가 한 줄에 모든 것을 유지하려는 경우
이 특정 문제에 대한
, 이것은 수행합니다
이
>>> for i in [1, 2, 3, 4, 5, 6]:
print hstack((np.where(x[1,x[0,:]-i]<x[0, -i], x[1,x[0,:]-i], 0)[:5], x[0,5:]))
[0 0 1 2 3 5 6 7 8 9]
[0 0 0 1 2 5 6 7 8 9]
[0 0 0 0 1 5 6 7 8 9]
[0 0 0 0 0 5 6 7 8 9]
[0 0 0 0 0 5 6 7 8 9]
[0 0 0 0 0 5 6 7 8 9]
편집 : 가 지금은 기본적으로 당신은 2D를 먹고 싶어, 더 나은 원래의 질문을 이해 배열을 계산하고 각 셀 주변의 N * N 셀 평균을 계산합니다. 그것은 아주 흔합니다. 우선 N을 홀수로 제한하고 싶지 않을 것입니다. 그렇지 않으면 셀 주변의 2 * 2 평균과 같은 것을 정의하기가 어렵습니다. 나는 당신이 당신에게 혼란을 야기 2D 배열을, 평평 할 필요가 없습니다 생각
#In this example, the shape is (10,10)
>>> a1=\
array([[3, 7, 0, 9, 0, 8, 1, 4, 3, 3],
[5, 6, 5, 2, 9, 2, 3, 5, 2, 9],
[0, 9, 8, 5, 3, 1, 8, 1, 9, 4],
[7, 4, 0, 0, 9, 3, 3, 3, 5, 4],
[3, 1, 2, 4, 8, 8, 2, 1, 9, 6],
[0, 0, 3, 9, 3, 0, 9, 1, 3, 3],
[1, 2, 7, 4, 6, 6, 2, 6, 2, 1],
[3, 9, 8, 5, 0, 3, 1, 4, 0, 5],
[0, 3, 1, 4, 9, 9, 7, 5, 4, 5],
[4, 3, 8, 7, 8, 6, 8, 1, 1, 8]])
#move your original array 'a1' around, use range(-2,2) for 5*5 average and so on
>>> movea1=[a1[np.clip(np.arange(10)+i, 0, 9)][:,np.clip(np.arange(10)+j, 0, 9)] for i, j in itertools.product(*[range(-1,2),]*2)]
#then just take the average
>>> averagea1=np.mean(np.array(movea1), axis=0)
#trim the result array, because the cells among the edges do not have 3*3 average
>>> averagea1[1:10-1, 1:10-1]
array([[ 4.77777778, 5.66666667, 4.55555556, 4.33333333, 3.88888889,
3.66666667, 4. , 4.44444444],
[ 4.88888889, 4.33333333, 4.55555556, 3.77777778, 4.55555556,
3.22222222, 4.33333333, 4.66666667],
[ 3.77777778, 3.66666667, 4.33333333, 4.55555556, 5. ,
3.33333333, 4.55555556, 4.66666667],
[ 2.22222222, 2.55555556, 4.22222222, 4.88888889, 5. ,
3.33333333, 4. , 3.88888889],
[ 2.11111111, 3.55555556, 5.11111111, 5.33333333, 4.88888889,
3.88888889, 3.88888889, 3.55555556],
[ 3.66666667, 5.22222222, 5. , 4. , 3.33333333,
3.55555556, 3.11111111, 2.77777778],
[ 3.77777778, 4.77777778, 4.88888889, 5.11111111, 4.77777778,
4.77777778, 3.44444444, 3.55555556],
[ 4.33333333, 5.33333333, 5.55555556, 5.66666667, 5.66666667,
4.88888889, 3.44444444, 3.66666667]])
: 우리는 3 * 3 평균을한다고 가정. 또한 모서리 요소를 다듬는 것 외에 다르게 처리하려면 '원래 배열을 주변으로 이동'단계에서 np.ma
을 사용하여 마스크 된 배열을 만드는 것을 고려하십시오.
명확하게'vector2 [i]'를 포함시키지 않으려하거나 코드에서 실수였습니까? – Daniel
나는 그렇지 않습니다. 고맙습니다. – JEquihua
코드는 6x6 이웃이 아닌 각 셀의 3x3 이웃 평균을 계산합니다. 이게 의도적 인거야? – nneonneo