2011-05-02 5 views
11

숫자가있는 행렬에 스칼라를 곱하는 간단한 방법이 있는지 궁금합니다. 근본적으로 모든 값에 상수 40을 곱하기를 원합니다. 이것은 대각선 길이가 40 인 nxn 행렬이지만이 행렬을 크기를 조정하는 데 사용할 수있는 간단한 함수가 있는지 궁금합니다. 또는 어떻게하면 다른 행렬과 같은 모양으로 행렬을 만들고 그 대각선을 채울 수 있습니까?Numpy 매트릭스의 스칼라 제품을 어떻게 찾을 수 있습니까?

죄송합니다. 약간 기본적인 것 같지만 어떤 이유로 문서에서 찾을 수 없습니다.

답변

8

쉬운 : 당신이 실제로 배열을 대 NumPy와 매트릭스를 원하는 경우

N = 100 
a = np.eye(N) # Diagonal Identity 100x100 array 
b = 40*a # multiply by a scalar 

대신 a = np.asmatrix(np.eye(N))을 할 수 있습니다. 그러나 일반적으로 *은 numpy에서 요소 단위의 곱셈입니다.

+3

성능이 문제인 경우 OP는 복사본 'b'를 생성하지 않을 수도 있습니다.이 경우 'a * = 40'은 어레이를 제자리에서 축척합니다. – Paul

+0

b = np.diag ((40 * a,) * N) – cgohlke

+0

'numpy.fill_diagonal()'은 특정 요소로 대각선을 채우기위한 것입니다. 결과적으로, 항등 행렬을 구성한 다음 모든 요소에 상수를 곱하는 것보다 더 명확하고 빠릅니다. – EOL

10

대각선이 40이고 다른 모든 곳이 0 인 행렬을 원한다면 NumPy의 함수 fill_diagonal()을 0의 행렬에 사용할 수 있습니다. 따라서 사용자는 직접 수행 할 수

N = 100; value = 40 
b = np.fill_diagonal(np.zeros((N, N)), value) 

만이 특정 값에 요소를 설정하고, 따라서 상수 행렬의 모든 요소를 ​​포함하는 코드 승산보다 빠를 가능성 포함한다. 이 접근법은 또한 특정 값으로 대각선을 채우는 것을 명시 적으로 보여주는 장점이 있습니다.

당신이 대각 행렬 b 당신이 (명시 적으로 크기 N 필요 없음) 다음 바로 가기를 사용할 수있는 또 다른 매트릭스 a와 같은 크기로하려면 다음

b = np.fill_diagonal(np.zeros_like(a), value) 
2

@의 EOL의 대답에, b가 "None"이면 fill_diagonal의 반환 값은 채워진 배열이 아닙니다.

관련 문제