11

MATLAB と Numpy の両方で、配列は配列によってインデックス付けできます。ただし、動作は異なります。これを例で説明しましょう。

MATLAB:

>> A = rand(5,5)

A =

    0.1622    0.6020    0.4505    0.8258    0.1067
    0.7943    0.2630    0.0838    0.5383    0.9619
    0.3112    0.6541    0.2290    0.9961    0.0046
    0.5285    0.6892    0.9133    0.0782    0.7749
    0.1656    0.7482    0.1524    0.4427    0.8173

>> A([1,3,5],[1,3,5])

ans =

    0.1622    0.4505    0.1067
    0.3112    0.2290    0.0046
    0.1656    0.1524    0.8173

でこぼこ:

In [2]: A = arange(25).reshape((5,5))

In [3]: A
Out[3]: 
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24]])

In [6]: A[[0,2,4], [0,2,4]]
Out[6]: array([ 0, 12, 24])

つまり、MATLAB は行と列を選択し、Numpy は 2 つのインデックス配列を「圧縮」し、タプルを使用してエントリをポイントします。

Numpy で MATLAB の動作を取得するにはどうすればよいですか?

4

3 に答える 3

18

ヘルパー関数numpy.ix_を使用して、Matlab の動作を取得できます。

from numpy import ix_
A[ ix_( [0,2,4], [0,2,4] ) ]
于 2012-07-09T11:14:19.303 に答える
13

あなたはこれを行うことができます:

A[[0,2,4],:][:,[0,2,4]]

これにより、必要な MATLAB のような結果が得られます。

かなり一貫性がありませんが、インデックス付けにスライスを使用すると、そのようなハッカーなしで MATLAB のような結果が得られることに注意してください。

>>> A[1:3,1:3]
array([[ 6, 7],
       [11,12]])

numpy では、MATLAB と1:3は異なり、単に略語[1,2]やそのようなものではありません。(その時点で、あなたが確かに既に知っていること、つまり、Python1:3はちょっと似て[1,2]いるのに対し、MATLABはちょっと似ているということを言及する義務があると感じています[1,2,3]。右側のエンドポイントは MATLAB に含まれ、Python では除外されています。)

于 2012-07-09T10:52:05.283 に答える