3

次のコードを検討してください

X=np.matrix([[1,-1,1],[-1,0,1]])

print X.T
'''
[[ 1 -1]
 [-1  0]
 [ 1  1]]
'''

転置の解が <0 の解が存在するかどうかを確認したい。たとえば、これは、以下に解決策があるかどうかを確認することを意味します

1*y1 + -1*y2 < 0
-1*y1 + 0*y2 < 0
1*y1 + 1*y2 < 0

http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.solve.html#numpy.linalg.solveを読んでみましたが、明らかにそのような運はありません

4

2 に答える 2

1

あなたの質問は、原点とベクトルを含み、すべての座標が負である 3 次元空間の八分円に拡張する平面かどうかを尋ねるのと同じようU=r_[1,-1,1]ですV=r_[-1, 0, 1]

外積UxV(またはcross(U,V)この平面に垂直です。この外積にすべて同じ符号のゼロ以外のコンポーネントが3つある場合、それからの法線はどれも恐ろしい八分円にはなり得ません。あなたの数値の場合、私は得る3 つの要素すべてが負であるため、解決策はありません。

[アップデート]

一般に、法線にゼロが含まれていると、注意が必要なことが起こります。

Three-zeros : 元のベクトルが平行であるか、そのうちの 1 つがゼロです。ゼロでないものを 1 つ選び、すべてのコンポーネントの符号が同じであれば、解が得られます。

Two-zeros : あなたの平面は、X=0、Z=0、Y=0 のいずれかです。したがって、1 つの次元は常に非負であり、解はありません。

One-zero : プレーンには、X、Y、または Z 軸が含まれます。法線の残りの 2 つのコンポーネントの符号が異なる場合にのみ、解決策があります。

于 2013-05-23T15:44:10.503 に答える
0

必要なドキュメントは次のとおりです。

numpy 軸に沿って適用

import numpy as np:
def func(b,y1,y2):
    a = b.T
    if a[0]*y1 + a[1]*y2 < 0:
        return True
    else:
        return False
np.apply_along_axis(func,0,X,y1,y2)

では、y1 を -1 に、y2 を 3 にするとします。

>>> np.apply_along_axis(func,0,X,-1,3)
array([ True, False, False], dtype=bool)

つまり、転置すると、最初の行 (通常の最初の列) はアルゴリズムで機能しますが、2 番目と 3 番目は機能しません!

これは、任意の数の Y に対する関数であり、必要に応じて行列を大きくします。

def func(b,*args):
    a = b.T
    total = [a[i]*args[i] for i in range(len(args)-1)]
    if sum(total) < 0:
        return True
    else:
        return False
于 2013-05-23T15:37:11.893 に答える