0

とても簡単な質問があります。ループ内のマトリックスから列を削除したい。

Matlab では、以下を使用します。

特定の i に対して、

X(:,i)=[]

これにより、列が削除され、マトリックスが再形成されます。

Hansl (Gretl) プログラムで同等のものを知りたいです。

ありがとう!

4

1 に答える 1

2

申し訳ありませんが、おそらく手遅れですが、あなたの質問を見たばかりで、他の人にとっては役立つかもしれません。hansl (gretl のスクリプトおよびマトリックス言語) では、いくつかの可能性を考えることができました。

まず、列の数と i の値がわかっている場合、解決策はハードワイヤードのインデックス ベクトルを使用できます (ここでは i==2 および cols(X)==5 の場合)。

X = X[, {1, 3,4,5}]

第 2 に、最初の解決策はおそらく制限が厳しすぎるため、次のように行列の左部分と右部分を連結できます。

X = X[, 1: i-1] ~ X[, i+1 :cols(X)]

ただし、ここでの問題は、最初または最後の列にインデックスを付けてはならないことです。そうしないと、インデックス作成でエラーが発生します。

したがって、普遍的に機能するはずの私の最後の提案は次のとおりです。

X = selifc( X, ones(1, i-1) ~ 0 ~ ones(1, cols(X) - i) ) 

selfc() 関数は、2 番目のベクトル引数のエントリが 0 である列を破棄します。これは、i==1 または i==cols(X) でも機能します。この最終的なソリューションの短いバリエーションは次のようになります。

X = selifc(X, seq(1, cols(X)) .!= i)

これは、seq() 関数で構築された列インデックスの要素ごとの等しくない比較 (.!=) を行います。しかし、おそらく前の方法ほど読みやすくはありません。

幸運を!

于 2016-11-01T11:38:57.633 に答える