첫 번째 차원이 (R, G, B, A) 네 쌍둥이를 나타내는 크기가 작은 배열 (4, X, Y)이 있습니다. 제 목표는 각 X*Y
RGBA 네 쌍둥이를 X*Y
부동 소수점 값으로 변환하는 것입니다. 다음numpy 매핑 작업의 성능 향상
나의 현재 코드 :
codeTable = {
(255, 255, 255, 127): 5.5,
(128, 128, 128, 255): 6.5,
(0 , 0 , 0 , 0 ): 7.5,
}
for i in range(0, rows):
for j in range(0, cols):
new_data[i,j] = codeTable.get(tuple(data[:,i,j]), -9999)
data
크기
(4, rows, cols)
의 NumPy와 배열이다
및 new_data
크기 (rows, cols)
이다.
코드는 정상적으로 작동하지만 꽤 오랜 시간이 걸립니다. 이 코드를 어떻게 최적화해야합니까? 다음은 예상 된 결과를 반환하는 접근 방식이다
import numpy
codeTable = {
(253, 254, 255, 127): 5.5,
(128, 129, 130, 255): 6.5,
(0 , 0 , 0 , 0 ): 7.5,
}
# test data
rows = 2
cols = 2
data = numpy.array([
[[253, 0], [128, 0], [128, 0]],
[[254, 0], [129, 144], [129, 0]],
[[255, 0], [130, 243], [130, 5]],
[[127, 0], [255, 120], [255, 5]],
])
new_data = numpy.zeros((rows,cols), numpy.float32)
for i in range(0, rows):
for j in range(0, cols):
new_data[i,j] = codeTable.get(tuple(data[:,i,j]), -9999)
# expected result for `new_data`:
# array([[ 5.50000000e+00, 7.50000000e+00],
# [ 6.50000000e+00, -9.99900000e+03],
# [ 6.50000000e+00, -9.99900000e+03], dtype=float32)
어떻게 효율적이고 간결하게 문제를 해결하는 데 사용할 수있는 list.index의 벡터화 차 배열 할 수있는 변형을 포함 많은'rows'와'cols'가 있습니까? – Will
@Will 각각 수천 개. –
아마도 도움이 될 것입니다. http://stackoverflow.com/questions/36480358/whats-a-fast-non-loop-way-to-apply-a-dict-to-a-ndarray-meaning-use-elements – hpaulj