2016-07-04 6 views
1

ある行列を別の行列から減算し、絶対値を新しい行列に書き込む効率的な方法/関数はありますか?例えば は、私はエントリによってそれにエントリーを行うことができますが、大行列のために、これはかなり遅くなります...2つの行列を減算して、Pythonで絶対値を取得

:あなたがnumpyの配列にあなたの2Dアレイをキャストした場合、これを行う

X = [[12,7,3], 
[4 ,5,6], 
[7 ,8,9]] 

Y = [[5,8,1], 
[6,7,3], 
[4,5,9]] 

for i in range(len(r_0)): 
    for j in range(len(r)): 
     delta_r[i][j]= sqrt((r[i][j])**2 - (r_0[i][j])**2) 

答えて

1

を使用することをお勧めします結果の行列。

import numpy as np 

X = [[12,7,3], 
[4 ,5,6], 
[7 ,8,9]] 

Y = [[5,8,1], 
[6,7,3], 
[4,5,9]] 

result = np.absolute(np.array(X) - np.array(Y)) 

出力:また

[[7 1 2] 
[2 2 3] 
[3 3 0]] 

不要なが)あなたはネイティブのPythonでそうすることを要求された場合は、ネストされたリストの内包で一緒に寸法を圧縮でき。

result = [[abs(a-b) for a, b in zip(xrow, yrow)] 
      for xrow, yrow in zip(X,Y)] 

出力

[[7, 1, 2], [2, 2, 3], [3, 3, 0]] 
2

は些細次のようになります。

import numpy as np 

X = [[12,7,3], 
[4 ,5,6], 
[7 ,8,9]] 

Y = [[5,8,1], 
[6,7,3], 
[4,5,9]] 

X, Y = np.array(X), np.array(Y) 

result = X - Y 

Numpyは、マトリックスで簡単かつ効率的に動作するように設計されています。

また、行列を減算することについて話しましたが、個々の要素を四角形にして、結果を平方根にすることも考えられました。また、これはnumpyの簡単です:

result = np.sqrt((A ** 2) - (B ** 2)) 
0

私はあなたが両方の行列間の絶対的な要素単位差をつけたい場合は、あなたが簡単にnumpyのでそれらを引くと上numpy.absoluteを使用することができますnumpyの

X = numpy.array([ 
    [12,7,3], 
    [4 ,5,6], 
    [7 ,8,9] 
]) 

Y = numpy.array([ 
    [5,8,1], 
    [6,7,3], 
    [4,5,9] 
]) 

delta_r = numpy.sqrt(X ** 2 - Y ** 2) 
関連する問題