1. ホーム
  2. matlab

[解決済み] MATLABのエラーです。添え字のインデックスは実数の正の整数か論理値でなければならない

2022-02-27 22:54:29

質問

現在、私のコードを実行しているところですが、困った問題が見つかり、解決するためのアイデアが全くありません。

私が鍛えている関数は次のようなものです。

function out = CointPairs(PriceMat, Symbols)
    out=[];
    NofStocks = size(PriceMat, 2);
    CointMatrix= zeros(NofStocks);

    [rows, cols] = find(CointMatrix);
    CointPairs = [rows, cols];
    **cf= (CointPairs(:,1)-CointPairs(:,2))==0;**
    CointPairs(cf,:) = [];

    if(isempty(CointPairs))
        warning('No Cointegrated Pairs Found')
        return
    end
end

そして、血まみれの問題はこの行で発生します。

cf= (CointPairs(:,1)-CointPairs(:,2))==0;

というのは、quot;添え字のインデックスは、実数の正の整数か論理値でなければならないからです。 入力変数 "PriceMat" は価格行列 60x10 で、"Symbols" は 10x1 の文字列です。

もう一つ質問です :) 添え字のインデックスとはどういう意味ですか?

よろしくお願いします。

解決方法は?

ご質問を一つずつ解決していきましょう。

<ブロッククオート

さて、入力変数 "PriceMat" は 60x10 の価格行列で、"Symbols" は 10x1 の文字列でしたね。

を見てみましょう。 CointPairs 変数を使用します。 を使用した結果です。 find コマンドを使用します。 という場合があるかもしれません。 CointPairs を生成します。 の行列になります。これは find が存在する場合があります。 入力なし の中で CointMatrix が1(または0以外)である場合。 この場合 CointPairs は、要件を満たす要素がないため、実際には空となります。

そのため、このエラーが発生するのは、このような操作を 行列は許されないのに。を移動させる必要があります。 if ステートメント 前に する CointPairs = [rows, cols]; . そうすれば、アクセスエラーになることはないでしょう。 つまり、こうするのです。

[rows, cols] = find(CointMatrix);
CointPairs = [rows, cols];

%// Move here
if(isempty(CointPairs))
    warning('No Cointegrated Pairs Found');
    out = []; %// Make output empty - Must return something or you get an error
    return
end

%// Continue here
cf= (CointPairs(:,1)-CointPairs(:,2))==0;
CointPairs(cf,:) = [];

%// More code here...
%// ...

一つ細かいコメントをすると、出力変数が out しかし、あなたはそれをコードのどこにも代入していません。 これは意図的なものなのでしょうか?


<ブロッククオート

もう一つ質問ですが、quot;subscript indices"とは一体どういう意味なのでしょうか?

添え字インデックスとは、配列/行列の要素にアクセスするために使用する値のことです。 例えば、あなたの行列がそうだとします。

A = [1 2 3; 4 5 6; 7 8 9];

を行うことで A(2,2) となり、要素5が得られます。 2行目と2列目は、次のように知られています。 添え字インデックス . インデックスは複数を意味するので、行と列の位置の1組だけでなく、2つの要素の配列を使用して、行列の行と列にアクセスすることができます。 その中の対応する各要素のペアが添え字インデックスとなります。

基本的には、行列の行と列にアクセスするために使用する数値です。 行列 / 配列の要素にアクセスするには 正の数 (1,2,3,4...など)または 論理演算子 (すなわち true / false ). 空の行列,0,負の整数,浮動小数点数は許されない.

上記の有効な入力のいずれも使用せずに行列にアクセスしているため、このエラーが発生します。


お役に立てれば幸いです。