0

Matlab関数をPythonに変換しています。残念ながら、私はMatlabの専門家ではないため、次のようないくつかの行を理解するのは困難です。

a = [[0, 1]; [2, 3]]
bsxfun(@rdivide, sqrt(a), a)

まだよくわかりませんが、この行は理解していると思います

r / a

sqrt(a)の各行r(または各列ですか?)およびr / sqrt(a)は、通常、次のようにnumpyに変換できます。

numpy.linalg.solve(sqrt(a).T, r.T).T

これに関する問題は次のとおりです:Matlabは結果が

       NaN   1.00000
   0.70711   0.57735

そしてnumpyはそれが

[ 1.  0.]
[ 0.55051026  1.41421356]

によって生成されました

for i in range(2): print linalg.solve(sqrt(a).T, a[i, :].T).T

エラーはどこにありますか?行列sqrt(a)とaは単なる例です。それらを他のマトリックスに置き換えることができます。私はbsxfunがrdivideで何をするのかを理解しようとしています。

4

2 に答える 2

1
>>> import numpy as np
>>> a = np.array([[0,1],[2,3]])
>>> a
array([[0, 1],
       [2, 3]])
>>> b = np.sqrt(a)
>>> b/a
Warning: invalid value encountered in divide
array([[        nan,  1.        ],
       [ 0.70710678,  0.57735027]])
>>>

逆行列による行列の乗算ではなく、要素ごとの除算が必要なため、必要なnumpy.linalgものではありません。

于 2012-09-17T09:38:09.520 に答える
0

1階では、Pythonコードの変換が行われます。

しかし、なぜコードを知りたいのか:

for i in range(2): print linalg.solve(sqrt(a).T, a[i, :].T).T

結果を出す

[ 1.  0.]
[ 0.55051026  1.41421356]

なぜならlinalg.solve()、線形行列方程式、または線形スカラー方程式のシステムを解くからです。

したがって、コードfor i in range(2): print linalg.solve(sqrt(a).T, a[i, :].T).T は線形行列方程式を解きます

0 * x0 + sqrt(2) * x1 = 0
1 * x0 + sqrt(3) * x1 = 1
0 * x0 + sqrt(2) * x1 = 2
1 * x0 + sqrt(3) * x1 = 3

だからあなたは結果を得るでしょう

[ 1, 0].T
[ 3 - sqrt(6) , sqrt(2)].T

しなやかな形(2L,).Tはと同じな(2L,)ので、答えが得られます。

于 2017-09-03T13:56:50.173 に答える