python 방진 구현 대각선 반복 예제
한 방진 행렬 에 대해 주 대각선 방향 을 평행 으로 하 는 대각선 요 소 를 옮 겨 다 니 는 것 을 실현 한다.
행렬 색인 에서 시작:
[[ 1 2 3 4 5]
[ 6 7 8 9 10]
[11 12 13 14 15]
[16 17 18 19 20]
[21 22 23 24 25]]
위의 삼각형 색인 옮 겨 다 니 기:
0 0
1 1
2 2
3 3
4 4
0 1
1 2
2 3
3 4
0 2
1 3
2 4
0 3
1 4
0 4
다음 삼각형 의 색인 옮 겨 다 니 기:
1 0
2 1
3 2
4 3
2 0
3 1
4 2
3 0
4 1
4 0
코드
import numpy as np
A = np.arange(25)+1
A = np.mat(A.reshape([5, 5]))
print(A)
"""
[[ 1 2 3 4 5]
[ 6 7 8 9 10]
[11 12 13 14 15]
[16 17 18 19 20]
[21 22 23 24 25]]
"""
Num_element = A.shape[0]
c = int((Num_element-1)/2)
# print(c)
R = np.zeros_like(A)
# print(R)
for j in range(Num_element):
print()
i = 0
# print(i, j)
while np.max([i, j])<Num_element:
print(i, j)
if np.abs(i-j)%2==0:
R[i, j] = A[c-int((j-i)/2), c+int((j-i)/2)]
else:
R[i, j] = (A[c-int((j-i-1)/2), c+int((j-i+1)/2)]+A[c-int((j-i+1)/2), c+int((j-i-1)/2)])/2
i=i+1
j=j+1
# print(R)
for k in range(1, Num_element):
print()
i = 0
# print(i, j)
while np.max([k, i])<Num_element:
print(k, i)
if np.abs(k-i)%2==0:
R[k, i] = A[c-int((i-k)/2), c+int((i-k)/2)]
else:
R[k, i] = (A[c-int((i-k-1)/2), c+int((i-k+1)/2)]+A[c-int((i-k+1)/2), c+int((i-k-1)/2)])/2
k=k+1
i=i+1
print(R)
상기 코드 에 서 는 각 대각선 의 모든 요소 에 대해 같은 할당 작업 을 수행 합 니 다.중 복 된 부분 을 함수 로 봉 하 는 것 을 고려 합 니 다:
def diag_opreation(k, i, Num_element, R, A):
c = int((Num_element-1)/2)
while np.max([k, i])<Num_element:
print(k, i)
if np.abs(k-i)%2==0:
R[k, i] = A[c-int((i-k)/2), c+int((i-k)/2)]
else:
R[k, i] = (A[c-int((i-k-1)/2), c+int((i-k+1)/2)]+A[c-int((i-k+1)/2), c+int((i-k-1)/2)])/2
k=k+1
i=i+1
return R
코드 변경:
for j in range(Num_element):
print()
i = 0
# print(i, j)
R = diag_opreation(i, j, Num_element, R, A)
# print(R)
for k in range(1, Num_element):
print()
i = 0
# print(i, j)
R = diag_opreation(k, i, Num_element, R, A)
print(R)
출력 결 과 는:
[[13 11 9 7 5]
[15 13 11 9 7]
[17 15 13 11 9]
[19 17 15 13 11]
[21 19 17 15 13]]
이상 의 python 이 방진 을 실현 하 는 대각선 을 옮 겨 다 니 는 예 는 바로 소 편 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.여러분 께 참고 가 되 고 저 희 를 많이 사랑 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.