C ++の線形代数パッケージを使用する場合、遅延と見なされますか?


11

最初に、質問を実際に述べる前に、背景を説明します。私は物理学を研究しており、私のプログラミングクラスはすべて、MATLABのような簡単なプログラミング言語で行われています。簡単に言うと、言語はあなたのために多くのことを考えているということです...次の数年間、私はコンピューターサイエンスのコースを受講し、プログラミングのキャリアを追求することを考えています。

多くの大学のコースがC ++であると考えると、MATLABと同様の構文を持つ線形代数パッケージ(Armadillo)を使用することは怠consideredと見なされますか?

現在、遺伝的アルゴリズムをコーディングしていますが、MATLABでは高速になりましたが、C ++ではこれらのパッケージを使用せずに多くの時間を費やしています。

実生活ではどのように機能しますか?どのパッケージを使用できますか?

たとえば、armadilloでC ++の知識を構築したくないし、「vector.h」、「algorithm」、「list」など、他のより広く使用されているパッケージの深い知識も持ちたくない


9
プロジェクトと互換性のあるライセンスを持つものなら何でも使用できます。それ以外の場合は、単に時間を無駄にしているだけです。(適切な種類)怠isは良いです
リチャードティングル


カリキュラムにそれらが含まれていると仮定すると、線形代数パッケージ自体を使用すると、<vector>、<algorithm>、および<list>を学習できなくなると思います。
ブランディン

@RichardTingle:上司が禁止しない限り、何でも使用できます;
Doc Brown

タイトルlazysensibleに変更すると、答えは「はい」です(もちろん、線形代数を含むタスクを実行していると仮定します)。
ジェリーコフィン

回答:


21

リチャードのコメントはすでに答えのほとんどです。クラスのエクササイズ以外の目的でプログラミングを行う場合は常に、既存のコードをできるだけ再利用し、バランスを取るために他のいくつかの考慮事項を検討します。

コードの再利用の利点は次のとおりです。

  • すでにいくつかの作業が完了しているため、作業が速くなります。
  • 既存のコードは、最初から書いたものよりも優れている可能性が高くなります。おそらく、コードはより長く、テストされ、最適化されているからです。
  • 多くの場合、既存のコードは、あまり慣れていないドメインにあります。たとえば、物理シミュレーションを行っていますが、それは、線形代数を効率的に計算する方法についてあまり知らないという意味ではありません。他の人が書いたコードを使用すると、その専門知識に頼ることができます。

考慮すべきことがいくつかあります。

  • ライセンス。再利用するコードの作成者は著作権を保持しているため、許可なくコードを使用することはできません。ライブラリには、ライブラリで何ができるかを示すライセンスが付属しています。ライブラリを使用する場合は、ライセンスに従う必要があります。ArmadilloはMozilla Public License 2.0の下にあります。つまり、自由に使用できます。
  • 統合。プロジェクトが大きい場合、サードパーティのライブラリを統合するのはかなり複雑になる可能性があります。ライブラリから取得する使用量によっては、価値がない場合があります。
  • 分布。ライブラリがDLLとしてのみ使用可能であるか、システムへの登録が必要であるが、配布方法が「この実行可能ファイルをどこかにコピー」する必要がある場合、ライブラリを使用できない可能性があります。

sayingにあるように、プログラマーでは怠inは美徳です。


1
あなたはそれに触れますが、質問はクラスワークについて言及しているので、あなたが学習しようとしている作品にパッケージやライブラリを使用しないことが重要です。ニューラルネットワークの構築方法を学習しようとしている場合は、引数の解析にライブラリを使用し、ファイルioを使用しますが、ニューラルネットワークは自分で作成してください。
アランシュトコ

3
リストにない重要な点は、将来のメンテナンスです。サードパーティのライブラリを使用することを検討する場合、それはクローズドソースまたはオープンソースですが、組織が将来のメンテナンスを行うには複雑すぎるため、ライブラリベンダーが将来のメンテナンスサービスを提供することを確認する必要があります(ライブラリの進化を含む)一定の時間。それは、特定のソフトウェア会社が特定のライブラリを使用せず、独自のライブラリを作成することを好む最大の理由の1つです。
Doc Brown

1

「許可」とはどういう意味ですか?ここにいくつかの初心者の学生の誤解を明確にするのに役立つかもしれないものを追加するかもしれないと思います:あなたは大学で自分のコードやアルゴリズムなどを書くように求められます、あなたはコースを学んでいて、あなたが実際にコードを自分で書いて、クラスで学びました。このようなコーディングは、学習プロセスの補助となります。たとえば、特定のデータ構造/アルゴリズムを学習した後、独自のコードを記述して、実際にどのように機能するかを確認し、理解を深めます。意味あり。

実際のプログラミングプロジェクトを行っているとき、いくつかの概念や知識を学習するための補助としてコードを書いているわけではありません。エンジニアリング製品を生産しようとしています。エンジニアリングは実際には発明に関するものではありませんが、特定の実用的なニーズに対処するために、すでに他の人によってレイアウトされた基盤の上に構築されています。プログラミングとは、80%が他人のライブラリ/コードを読み取り/再利用し、20%が独自のものを書くということです。少し誇張されているかもしれませんが、あなたは精神を得ます。

あなたの場合、コースのプログラミングプロジェクトを実行していて、独自のアルゴリズムをコーディングするように明示的に要求されている場合、外部ライブラリを使用したくないでしょう。独自のエンジニアリングプロジェクトを行う場合は、独自のライブラリを作成する前に、できるだけ多くのライブラリを使用してください。

この区別を明確にすると、自分が何をしているかを理解できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.