私は特にforループを使わないでそれを作成する方法を知りたいと思います。また、どのように一般的なN次元のためにそれを行うことができますLevi-Civita matrix?MATLABでLevi-Civita 3x3x3行列を簡単に作成する方法はありますか?
答えて
[OK]を私は退屈していたので、私はねじれたルートを取った。これは "簡単"ではないので、質問に答えませんが、私は楽しんでいたので、これを共有しています。
wikipedia定義から、あなたはあなたのインデックスからCEVI-レビータシンボルの値を与える機能を構築することができます。
LC_value = @(v) round(prod(prod(triu(repmat(v,[numel(v) 1])-repmat(v',[1 numel(v)]),1) ...
./repmat(factorial([1:numel(v)]'),[1 numel(v)])+tril(ones(numel(v))))));
これは、一般的なn次元のネストされた製品定義を実装しています。階乗関数が高次元で問題を引き起こす可能性があることに注意してください。 round
関数は、浮動小数点演算を行って整数を生成するため、そこにあります。
次のステップは、すべての可能なインデックスの組み合わせにこの関数を適用することです。それにもかかわらず、[1 2 3]
の順列にのみ適用する方が速い。
sites = perms([1 2 3]);
values = arrayfun(@(i)LC_value(sites(i,:)),(1:size(sites,1))');
lcMat = zeros(3,3,3);
lcMat(sub2ind(size(lcMat),sites(:,1),sites(:,2),sites(:,3))) = values;
これだけです。それは三次元のために働いています、そして、私はそれをテストしていませんが、より高次元のために動作するはずです。
ファイル交換 - #1と#2の少なくとも2つの機能が見つかりました。あなたはそれらをチェックしましたか?どちらもループを使用しています。
3Dマトリックスの場合は、直接入力してループを避けることができます。
トピックに何らかの種類の説明を含めるとよいでしょう。ここでWikiページへのリンクです:http://en.wikipedia.org/wiki/Levi-Civita_symbol
ここで非ループソリューションは、3×3×3 Levi-Civita matrixlinear indexingを使用のために特別です:
lcMat = zeros(3,3,3);
lcMat([8 12 22]) = 1;
lcMat([6 16 20]) = -1;
はEDIT:
そして、ここでは、N-dimensional Levi-Civita matrixのための、より一般的かつ簡潔非ループソリューションです:
[mats{1:N}] = ndgrid(1:N);
pairsIndex = nchoosek(1:N,2);
lcMat = sign(prod(cat(N+1,mats{pairsIndex(:,2)})-...
cat(N+1,mats{pairsIndex(:,1)}),N+1));
もちろん、トレードオフがあります。ループを使用しませんが、作成される可能性のある大きな一時変数があります。 N
が大きいほど、このメモリコストは高くなります。
- 1. Eclipseでモデル/ UMLを簡単に作成する方法はありますか?
- 2. API作成の簡単な方法はありますか?
- 3. mysqlでjsonデータを作成する簡単な方法はありますか?
- 4. ユーザーログインを簡単に作成する方法はありますか?
- 5. Cの文字列配列から文字列を作成する簡単な方法はありますか?
- 6. これを行う簡単な方法はありますか?
- 7. ファイルディスクリプタを簡単にフォークする方法はありますか?
- 8. QProgressBarを簡単にカスタマイズする方法はありますか?
- 9. CObListを簡単にソートする方法はありますか?
- 10. 簡単な方法でDatatableを作成する必要があります。
- 11. WebSphereに簡単にデプロイする方法はありますか?
- 12. サンプルFHIRリソースを簡単に生成する方法はありますか?
- 13. 簡単な対応解析で行列を作成する方法は?
- 14. WPFの親行に簡単にバインドする方法はありますか?
- 15. このコードを実行するための簡単で簡単な方法はありますか? [PHP、Loops、Arrays]
- 16. Readlineに代わる簡単な方法はありますか?
- 17. pandas.Seriesを単調にする簡単な方法はありますか?
- 18. if else文を実行する簡単な方法はありますか?
- 19. setTimeoutを実行する簡単な方法はありますか?
- 20. エンコードダイアログボックスでC#.NETファイルダイアログを簡単に作成する方法はありますか?
- 21. Object-c/iPhone-OSでオブジェクトの作成者オブジェクトを簡単に取得する方法はありますか?
- 22. VB .NETアプリケーションで透明なフォームを簡単に作成する方法はありますか?
- 23. spring-restdocsで個々のスニペットを簡単に作成する方法はありますか?
- 24. 起動時にアルフレコでユーザー/グループを作成する簡単な方法はありますか?
- 25. クラスからインターフェイスを簡単に作成する方法は?
- 26. 行列上のジュリアで簡単な共分散を作成する方法
- 27. Kerasでclass_weightを簡単に割り当てる方法はありますか?
- 28. MacのCソースファイルから.exeファイルを簡単に作成する方法はありますか?
- 29. Cでビットマスクを作成する簡潔な方法はありますか?
- 30. 最新のOpenGLで「オンザフライ」で簡単なアニメーションを作成する方法はありますか?
あなたのメソッドは4-dでも使えます。しかし、5-dで失敗した。何か特別な理由? –