4
#these are defined as [a b]
hyperplanes = np.mat([[0.7071,    0.7071, 1], 
                      [-0.7071,   0.7071, 1],
                      [0.7071,   -0.7071, 1],
                      [-0.7071,  -0.7071, 1]]);

a = hyperplanes[:][:,0:2].T;
b = hyperplanes[:,2];

これらの [:][:,0:2] の意味は何ですか? a と b の最終結果は?

4

1 に答える 1

8

対話型インタープリターを使用してこれを見つけることができます。

In [3]: hyperplanes = np.mat([[0.7071,    0.7071, 1], 
   ...:                       [-0.7071,   0.7071, 1],
   ...:                       [0.7071,   -0.7071, 1],
   ...:                       [-0.7071,  -0.7071, 1]])

Python では行末にセミコロンは必要ないことに注意してください。

In [4]: hyperplanes
Out[4]: 
matrix([[ 0.7071,  0.7071,  1.    ],
        [-0.7071,  0.7071,  1.    ],
        [ 0.7071, -0.7071,  1.    ],
        [-0.7071, -0.7071,  1.    ]])

オブジェクトを取得しmatrixます。NumPy は通常、ndarray(上記np.arrayの代わりに行うnp.mat) を使用しますが、この場合、行列であろうと であろうとすべてが同じndarrayです。

を見てみましょうa

In [7]: hyperplanes[:][:,0:2].T
Out[7]: 
matrix([[ 0.7071, -0.7071,  0.7071, -0.7071],
        [ 0.7071,  0.7071, -0.7071, -0.7071]])

これのスライスは少し奇妙です。次の点に注意してください。

In [9]: hyperplanes[:]
Out[9]: 
matrix([[ 0.7071,  0.7071,  1.    ],
        [-0.7071,  0.7071,  1.    ],
        [ 0.7071, -0.7071,  1.    ],
        [-0.7071, -0.7071,  1.    ]])

In [20]: np.all(hyperplanes == hyperplanes[:])
Out[20]: True

言い換えれば、そこ[:]にはまったく必要ありません。次に、 が残りますhyperplanes[:,0:2].T。は[:,0:2]に簡略化できます。これは、 のすべての行を取得したいが、最初の 2 列だけ[:,:2]を取得したいことを意味します。hyperplanes

In [14]: hyperplanes[:,:2]
Out[14]: 
matrix([[ 0.7071,  0.7071],
        [-0.7071,  0.7071],
        [ 0.7071, -0.7071],
        [-0.7071, -0.7071]])

.T転置を与えます。

In [15]: hyperplanes[:,:2].T
Out[15]: 
matrix([[ 0.7071, -0.7071,  0.7071, -0.7071],
        [ 0.7071,  0.7071, -0.7071, -0.7071]])

最後に、b = hyperplanes[:,2]すべての行と 2 番目の列を示します。つまり、列 2 のすべての要素です。

In [21]: hyperplanes[:,2]
Out[21]: 
matrix([[ 1.],
        [ 1.],
        [ 1.],
        [ 1.]])

Python はインタープリター言語であるため、自分で試してみて、何が起こっているのかを理解するのは簡単です。将来、行き詰まった場合は、インタープリターに戻って試してみてください - いくつかの数字を変更したり.T、.

于 2013-09-19T03:36:18.697 に答える