タグ付けされた質問 「vectorization」

10
要素ごとの加算が、結合されたループよりも個別のループではるかに速いのはなぜですか?
仮定a1、b1、c1、およびd1ヒープメモリと私の数値コードのポイントは、以下のコアループを有しています。 const int n = 100000; for (int j = 0; j < n; j++) { a1[j] += b1[j]; c1[j] += d1[j]; } このループは、別の外部forループを介して10,000回実行されます。スピードアップするために、コードを次のように変更しました。 for (int j = 0; j < n; j++) { a1[j] += b1[j]; } for (int j = 0; j < n; j++) { c1[j] += …

10
パンダのマップ、applymap、applyメソッドの違い
基本的な例でこれらのベクトル化方法をいつ使用するか教えてもらえますか? 私は見mapているSeries残りの部分であるのに対し、法DataFrame方法。applyとapplymap方法について混乱しました。関数をDataFrameに適用する方法が2つあるのはなぜですか?繰り返しになりますが、使用法を説明する簡単な例はすばらしいでしょう。

4
ベクトルの要素のインデックスを見つけるためのR関数はありますか?
Rでは、要素xとベクトルがありvます。にv等しい要素の最初のインデックスを見つけたいのですがx。これを行う方法の1つは次のとおりwhich(x == v)[[1]]です。それを行うためのより直接的な方法はありますか? ボーナスポイントについてx、ベクトルなら機能する機能はありますか?つまり、xin の各要素の位置を示すインデックスのベクトルを返す必要がありvます。

7
「ベクトル化」とは何ですか?
今、何度か、MATLAB、Fortranでこの用語に出会ったことがあります...その他... だから私はここで、ベクトル化とは何か、そしてたとえば「ループはベクトル化されている」とはどういう意味ですか?

4
「* apply」ファミリーは本当にベクトル化されていませんか?
したがって、私たちはすべてのRの新規ユーザーに「applyベクトル化されていません。パトリックバーンズRインフェルノサークル4をチェックしてください」と言っています(引用します)。 一般的な反射は、適用ファミリーで関数を使用することです。これは ベクトル化ではなく、ループ非表示です。apply関数の定義にはforループがあります。lapply関数はループを埋めますが、実行時間は明示的なforループとほぼ同じになる傾向があります。 実際、applyソースコードをざっと見てみると、ループがわかります。 grep("for", capture.output(getAnywhere("apply")), value = TRUE) ## [1] " for (i in 1L:d2) {" " else for (i in 1L:d2) {" これまでのところ、わかりましたが、見てみるとlapply、vapply実際にはまったく異なる画像が表示されます。 lapply ## function (X, FUN, ...) ## { ## FUN <- match.fun(FUN) ## if (!is.vector(X) || is.object(X)) ## X <- as.list(X) ## .Internal(lapply(X, FUN)) ## …

6
NumPy配列のすべてのセルでの関数の効率的な評価
与えられたnumpyのの配列A、適用する最速/最も効率的な方法何同じ機能を、Fに、すべてのセル? A(i、j)にf(A(i、j))を割り当てると仮定します。 関数fにはバイナリ出力がないため、マスク()演算は役に立ちません。 「すべてのセルを通る」「明白な」二重ループ反復は最適なソリューションですか?


2
パンダのforループは本当に悪いのですか?いつ気にすべきですか?
あるforループは、実際には「悪いですか」?そうでない場合、どのような状況で、従来の「ベクトル化された」アプローチを使用するよりも優れていますか?1 私は「ベクトル化」の概念と、パンダが計算を高速化するためにベクトル化された手法をどのように使用するかをよく知っています。ベクトル化された関数は、シリーズ全体またはDataFrame全体に操作をブロードキャストし、従来のデータの反復よりはるかに高速化します。 しかし、forループとリスト内包表記を使用してデータをループすることを含む問題の解決策を提供する多くのコード(Stack Overflowでの回答を含む)を提供していることに驚いています。ドキュメントとAPIは、ループは「悪い」ものであり、配列、系列、またはデータフレームを反復することは「決して」すべきではないと述べています。それで、ループベースのソリューションを提案しているユーザーを時々見るのはなぜですか? 1-質問がいくぶん広範に聞こえることは事実ですが、forループは通常、従来のデータの反復よりも優れているという非常に特殊な状況があります。この投稿は、後世のためにこれを捉えることを目的としています。

8
JVMのJITコンパイラーは、ベクトル化された浮動小数点命令を使用するコードを生成しますか?
私のJavaプログラムのボトルネックは、ベクトルドット積の束を計算するためのいくつかのタイトなループであるとしましょう。はい、プロファイリングしました、はい、それがボトルネックです、はい、それは重要です、はい、それはまさにアルゴリズムです。はい、Proguardを実行してバイトコードを最適化しました。 仕事は本質的に、ドット積です。同様に、2つfloat[50]あり、ペアワイズ積の合計を計算する必要があります。SSEやMMXのように、この種の操作をすばやく大量に実行するためのプロセッサ命令セットが存在することは知っています。 はい、おそらくJNIでネイティブコードを書くことでこれらにアクセスできます。JNIの呼び出しにはかなりの費用がかかります。 JITがコンパイルするものまたはコンパイルしないものを保証できないことはわかっています。誰もがしている、これまで、これらの命令を使用してJIT生成コードのことを聞きましたか?もしそうなら、このようにコンパイル可能にするのに役立つJavaコードについて何かありますか? おそらく「ノー」です。尋ねる価値があります。

5
Matlabベクトル化-セルに対するゼロでない行列行インデックス
私はMatlabと協力しています。 バイナリ正方行列があります。各行には、1の1つ以上のエントリがあります。この行列の各行を調べて、それらの1のインデックスを返し、セルのエントリに格納します。 Matlabではforループが本当に遅いので、この行列のすべての行をループしないでこれを行う方法があるかどうか疑問に思っていました。 たとえば、私の行列 M = 0 1 0 1 0 1 1 1 1 そして、最終的に、私は次のようなものが欲しい A = [2] [1,3] [1,2,3] A細胞もそうです。 より迅速に結果を計算する目的で、forループを使用せずにこの目標を達成する方法はありますか?

5
2D配列の対角線あたりの最大値
私は配列を持っていて、動的ウィンドウで最大のローリング差分が必要です。 a = np.array([8, 18, 5,15,12]) print (a) [ 8 18 5 15 12] だから私は最初に自分で違いを生み出します: b = a - a[:, None] print (b) [[ 0 10 -3 7 4] [-10 0 -13 -3 -6] [ 3 13 0 10 7] [ -7 3 -10 0 -3] [ -4 6 -7 …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.