-1

이렇게 곱셈을 수행하는 가장 간단한 방법은 무엇입니까? 어레이의 배열로 NumPy 배열의 스칼라를 빠르게 변환하는 방법

# c's are scalars (or arrays like A's in general) 
x = np.array([c1, c2, c3]) 
# A's are NumPy arrays 
M = np.array([A1, A2, A3]) 

는 A의는 NumPy와 숫자 multidim 배열 (의 말 행렬을 보자)이며,

x*M = [c1*A1, c2*A2, c3*A3] 

C의 스칼라입니다 얻을 수 있습니다.


예 번호 :

x = np.array([1,2,3]) 
A = np.random.rand(2,2) 
M = np.array([A,A,A]) 
+0

모양과'M'의 데이터 타입은 무엇입니까? 'M '의 모든 * 하위 배열 *은 같은 모양입니까? – Divakar

+0

'M '의'dtype' 은요? 객체의 1 차원 배열입니까? 숫자의 다차원 배열입니까? – hpaulj

+0

@hpaulj 숫자가 다차원 배열 인 것을 생각해 봅시다 - 단순성을 위해 - 2D 행렬은'np.array'로 저장됩니다. 왜 중요합니까? 스칼라에는 거의 모든 것이 곱해질 수 있습니다. – homocomputeris

답변

0

제품 = [X의 [I] * M [I]의 전 범위 (LEN (X))]

+0

또는 다음과 같이하십시오 :'[A * c for (A, c) in zip (M, x)]'. 어쨌든, 나는 이해력이 느리다는 것을 믿습니다. – homocomputeris

2

M은 NumPy와 배열이면 numpy 브로드 캐스팅을 활용하려면 기본 숫자 유형 (예 : 객체가 아님)을 사용하여 에 차원을 추가하여 M과 동일한 차원 수를 가져야하며 요소 별 와이드 곱셈이 작동해야합니다.

x.reshape((-1,) + (1,)*(M.ndim - 1)) * M 

x = np.array([1,2,3]) 

2D의 경우 :

M = np.arange(12).reshape(3,4)  
x.reshape((-1,) + (1,)*(M.ndim - 1)) * M 
#array([[ 0, 1, 2, 3], 
#  [ 8, 10, 12, 14], 
#  [24, 27, 30, 33]]) 

3D 케이스 :

M = np.arange(12).reshape(3,2,2) 
x.reshape((-1,) + (1,)*(M.ndim - 1)) * M 
#array([[[ 0, 1], 
#  [ 2, 3]], 

#  [[ 8, 10], 
#  [12, 14]], 

#  [[24, 27], 
#  [30, 33]]]) 
+0

고마워,이 하나의 작품. 하지만 가독성 ... 무슨 일이 일어나고 있는지 이해하는 데는 시간이 걸렸습니다. :) – homocomputeris

관련 문제