2017-01-24 14 views
1

私はMatlabからPythonへの 'for'ループコードを翻訳しようとしています。このブロックには文が1つあります:A[B]=C。これら3つのA、B、Cのすべてが行列です。 Pythonでは、A[B-1]=Cと書く必要があります。これは、MatlabとPythonの間のインデックス基準が異なるためです。 Bが空でない場合、この文はPythonでうまくいきます。 Bが空である場合は、この文は次のように進む:numpyで別の行列のインデックスとして空の行列を使用する

A11 = np.copy(A[:,B-1]) #Remind that B is an empty matrix, like B=np.array([0]) 

はIndexError:インデックスとして使用されるアレイは、Bが空の場合、実際

を入力整数(またはブール)でなければならない何行列A11は空行列にすぎません。間違いなく、ifブロックを使用して、Bが空の行列である場合に、どの行列A11を定義するかを定義することができます。しかし、この種の行列をインデックスとして使用するような別の5つのステートメントがあるので、それは面倒です。この問題を解決する方法を私に示す例を教えてください。どうもありがとう!

答えて

2

B = np.array([0])は、空の行列を生成しません。リスト[0]をnumpy配列に変換するだけです。

B = np.zeros(0)(引数がシェイプの場合)のようなものを意味しているとします。 Numpyのデフォルトはdtype =float64ですが、整数またはブール型の索引付けに配列を使用するには、型が必要です。実際に整数である値を持つ空でない配列の場合、numpyはそれがただdtypeを変更できることを示しています。

問題を解決するには、初期化時にdtype(intまたはbooleanに)を指定するだけです。つまり、B = np.zeros(0, dtype=np.int)は問題ありません。 Aは、形状寸法の1つが0であるという意味で「空行列」になりますが、他のものは変更されません。

+0

あなたの答えをありがとう!私はあなたのコードを使用して 'B'を生成しようとしました: 'np.zeros(0、dtype = np.int)'。そして、その空行列Bを使って行列Aから何らかの部分を抽出します。前に使った空行列と比較して、要素は 'float64'型です。問題は、行列Bのdtypeを** float64 **から** int32 **に移さなければならないということですか? Thxあなたの助けに! –

+0

int型またはbool型が動作するはずです。あなたが実際に 'dtype'を** float64 **にしたいのであれば、インデックス付けのために行列Bを使うのは意味をなさないでしょう。 – neptunes5thmoon

+0

ご協力ありがとうございます!本当にそれを感謝します! –

関連する問題