2017-09-22 12 views
1

T (w x h x d)의 3D 텐서를 고려하십시오.tensorflow 또는 numpy의 행렬의 특수 타일링

목표는 고유 한 방식으로 3 차원을 따라 타일링하여 R = (w x h x K)의 텐서를 만드는 것입니다.

텐서는 의미, 3 차원 K 시간에 각 조각을 반복해야합니다 :

T[:,:,0]=R[:,:,0:k] and T[:,:,1]=R[:,:,k:2*k] 

, T[:,:,0]=R[:,:,::k]을주는 3 차원의 모든 k 번째에 반복 표준 기와에 미묘한 차이가있다. 그 축을 따라

+0

, 당신을위한 게시 솔루션 작업을했다? – Divakar

답변

1

사용 np.repeat -

np.repeat(T,k,axis=2) 

샘플 실행 -

In [688]: # Setup 
    ...: w,h,d = 2,3,4 
    ...: k = 2 
    ...: T = np.random.randint(0,9,(w,h,d)) 
    ...: 
    ...: # Original approach 
    ...: R = np.zeros((w,h,d*k),dtype=T.dtype) 
    ...: for i in range(4): 
    ...:  R[:,:,i*k:(i+1)*k] = T[:,:,i][...,None] 
    ...: 

In [692]: T 
Out[692]: 
array([[[4, 5, 6, 4], 
     [5, 4, 4, 3], 
     [8, 0, 0, 8]], 

     [[7, 3, 8, 0], 
     [8, 7, 0, 8], 
     [3, 6, 8, 5]]]) 


In [690]: R 
Out[690]: 
array([[[4, 4, 5, 5, 6, 6, 4, 4], 
     [5, 5, 4, 4, 4, 4, 3, 3], 
     [8, 8, 0, 0, 0, 0, 8, 8]], 

     [[7, 7, 3, 3, 8, 8, 0, 0], 
     [8, 8, 7, 7, 0, 0, 8, 8], 
     [3, 3, 6, 6, 8, 8, 5, 5]]]) 

In [691]: np.allclose(R, np.repeat(T,k,axis=2)) 
Out[691]: True 

또는 np.tilereshape - 그래서

np.tile(T[...,None],k).reshape(w,h,-1) 
+0

바꿀 필요가 없습니다. 'np.repeat'는'axis' 매개 변수를 취합니다. – user2357112

+0

@ user2357112 그래, 너무 복잡해. 고마워, 편집. – Divakar

+0

감사. 그냥 np.repeat를 발견했습니다. 그러나 동일 물에 대한 텐서 흐름에는 아무런 변화가 없습니다. – user2527599