순열 행렬의 생성 속도를 높이는 코드를 찾고 있습니다. 즉, 각 열 값이 m 값을 반복하면서 각 행에 n^m 조합을 만드는 n 열의 행렬을 만들고 싶습니다.numpy 배열/행렬 값의 순열
1 1 1 1 1 1 1
1 1 1 1 1 1 2
1 1 1 1 1 1 3
1 1 1 1 1 1 4
1 1 1 1 1 1 5
1 1 1 1 1 2 1
...
5 5 5 5 5 5 5
문제가되지 않는 행의 순서 만, 아래의 예에서 유사한 매트릭스를 만들고 2이 경우의 행렬을 생성하는 방법, N = 7, m = 5가있다 모든 조합이 만들어집니다. 다음 두 가지 방법으로 배열을 만들었지 만 metod1은 매우 느리고 (이해하기 쉽지만 매우 자세하지만) num2 함수를 사용하면 method2가 빠릅니다. 그러나 매트릭스를 만들려면 더 빠른 방법론을 찾아야합니다.
import numpy as np
############################################
def permArray_meth1():
allArray = np.zeros((1,7))
for a1 in range(1,6):
for a2 in range(1,6):
for a3 in range(1,6):
for a4 in range(1,6):
for a5 in range(1,6):
for a6 in range(1,6):
for a7 in range(1,6):
allArray = np.append(allArray, np.array([a1,a2,a3,a4,a5,a6,a7]).reshape(1,7), axis=0)
allArray = np.delete(allArray, 0, 0)
return allArray
############################################
def permArray_meth2():
##### Create permutation matrix #####
a = np.arange(np.power(5,7)).reshape(5,5,5,5,5,5,5)
allArray = [(a1,a2,a3,a4,a5,a6,a7) for a1,a2,a3,a4,a5,a6,a7 in np.ndindex(a.shape)]
##### Convert list to array #####
allArray = np.asarray(allArray)+1
return allArray
############################################
if __name__ == "__main__":
allArray = permArray_meth1() # (50sec)
print 'allArray1', np.shape(allArray)
allArray = permArray_meth2() # (1sec)
print 'allArray2', np.shape(allArray)
나는 속도가 사용되는 CPU 하드웨어에도 달려 있다는 것을 알고 있지만, 위에 표시된 비교적 빠른 코드를 찾고 있습니다.
다른 방법/코드가 있습니까? 들면
import numpy as np
def permgrid(m, n):
inds = np.indices((m,) * n)
return inds.reshape(n, -1).T
:
매트릭스로 무엇을 하시겠습니까? 전체 행렬에 함수를 적용하거나 라인 단위로 함수를 적용하고 있습니까? – plonser
@ plonser, 함수를 라인 단위로 적용하는 것입니다. – iblasi