問題タブ [n-dimensional]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
convex-hull - n 次元空間における 2 つの凸集合の交点
$X={x_1,\ldots,x_p}$ と $Y={y_1,\ldot,y_q}$ を $\mathbb{R}^n$ の 2 つの点の集合とする。$Z$ が $\mathbb{ R}^n$?
opencl - OpenCL: ワークアイテム、処理要素、NDRange
クラスメートと私は初めて OpenCL に直面しています。予想通り、いくつかの問題が発生しました。以下に、私たちが抱えていた問題と見つけた答えをまとめました。ただし、すべてが正しいかどうかはわかりませんので、回答とその下の質問の両方をご覧いただければ幸いです。
それを単一の質問に分割しなかったのはなぜですか?
- それらは部分的に互いに関連しています。
- これらは典型的な初心者の質問だと思います。相談した同級生は皆「それは私も分からなかった」と答えていました。
作業項目と処理要素
私が見たほとんどの OpenCL に関する講義では、同じ図を使用して、コンピューティング ユニットと処理要素、およびワーク グループとワーク アイテムを紹介しています。これにより、クラスメートと私はこれらの概念を絶えず混乱させてきました。したがって、処理要素が作業項目とは大きく異なるという事実を強調する定義を思いつきました。
- ワークアイテムは実行中のカーネルですが、処理要素は実際に計算を行うものを表す抽象モデルです。ワークアイテムはソフトウェアに一時的に存在するものですが、処理要素はハードウェアに物理的に存在するものを抽象化します。ただし、ハードウェアによっては、したがって OpenCL の実装によっては、作業項目が、いわゆるプロセッシング エレメントによって表されるハードウェアの一部にマップされ、実行される場合があります。
質問 1:これは正しいですか? これを表現するより良い方法はありますか?
NDRange
NDRangeの概念を次のように認識します。
- そこにある作業項目の量は、NDRange サイズで表されています。一般に、これはグローバル サイズとも呼ばれます。ただし、NDRange は、1 次元、2 次元、または 3 次元 ("ND") のいずれかになります。
- 1次元の問題は、線形ベクトルの計算になります。ベクトルのサイズが 64 で、そのベクトルを処理する作業項目が 64 ある場合、NDRange のサイズは 64 になります。
- 2 次元の問題は、画像に対する何らかの計算になります。1024x768 の画像の場合、NDRange のサイズ Gx は 1024 になり、NDRange のサイズ Gy は 768 になります。これは、その画像の各ピクセルを処理するために 1024x768 の作業項目があることを前提としています。NDRange のサイズは 1024x768 になります。
- 3 次元の例は、3D モデルなどの計算です。さらに、NDRange サイズ Gz があります。
質問 2:もう一度言いますが、これは正しいですか?
質問 3:これらの寸法は、便宜上のものですよね? 画像の各ピクセルのカラー値を、サイズ の線形ベクトルに格納するだけですwidth * height。同じことが、3D の問題にも当てはまります。
様々
質問 4:カーネル (つまり、作業項目) の実行は、Understood を使用して作業グループ内で同期できると言われていましたbarrier(CLK_LOCAL_MEM_FENCE);。また、ワーク グループを同期できないと (繰り返し) 言われていました。大丈夫。しかし、その後、の使用はbarrier(CLK_GLOBAL_MEM_FENCE);何ですか?
質問 5:ホスト プログラムでは、利用可能なプラットフォームの1つからの 1 つまたは複数のデバイスで構成されるコンテキストを指定します。ただし、正確に1 つのデバイス (コンテキスト内にある必要があります) にリンクされている、いわゆるコマンド キューにカーネルをエンキューすることしかできません。繰り返しますが、コマンド キューは以前に定義されたコンテキストではなく、単一のデバイスにリンクされています。右?
php - N 次元配列 PHP の変更
N次元配列の各要素の前に(再帰的に)次元を追加するにはどうすればよいですか? 私が持っているとしましょう
そして、部屋、ベッド、素材の前に「[0]」次元を追加したいと思います。(最後の要素が配列の場合にのみ次元を追加します)。また、余分な [0] ディメンションが既に存在する場合は区別したいので、2 回表示されることはありません.. + 配列キーの名前が「@attribute」の場合、[0] を追加したくありません。
私はそれを理解しようとしていますが、私は本当に迷っています。これは私がこれまでに得たものです..
しかし、再帰的には機能しません。どんな助けでも大歓迎です。ありがとう!
c++ - C++ での N 次元行列の実装
C++ で独自の N 次元 Matrix クラスを実装したいと考えています。ただし、特にそのマトリックス内の要素にアクセスするための演算子の実装に関しては、それを実装する方法については行き詰まっています。
助言がありますか?
arrays - n 次元配列のインデックスを並べ替えて保持 -- MATLAB
12 次元配列があり、各次元を最適化問題のインデックス値として使用しています。
各インデックス値iは 1 ~ 5 の値です。
最大から最小に並べ替えAてインデックスを追跡したいので、どのインデックスが のどの値に対応するかがわかりますA。
したがって、私の理想的な出力は、1 つの列が値で、もう 1 つの列がインデックス値である 2 列のセル/配列です。
簡単な 3D の例: 3D 配列があるとします A(:,:,i1)。
どこ:
出力を次のようにしたいと思います。
編集:
次のような1x1x3x3サイズの入力があると仮定します
A(1,1,1,1) = 3
A(1,1,2,1) = 1
A(1,1,3,1) = 23
A(1,1,1,2) = 12
A(1,1,2,2) = 9
A(1,1,3,2) = 8
A(1,1,1,3) = 33
A(1,1,2,3) = 14
A(1,1,3,3) = 6
予想される出力は次のようになります。
33 [1,1,1,3]
23 [1,1,3,1]
14 [1,1,2,3]
12 [1,1,1,2]
9 [1,1,2,2]
8 [1,1,3,2]
6 [1,1,3,3]
3 [1,1,1,1]
1 [1,1,2,1]
python - n次元のnumpy配列を準備、移入、探索する方法は?
28 個のパラメーターを持つ物理システムをモデル化しました。シミュレーションは、約 10 個の出力パラメーターの別のリストを計算します。ここで、パラメーター空間を調査する必要があります。入力パラメーターのいくつかは一定に保ち、いくつかは複数の値を持ちます。入力構造は次のようになります。
シミュレーション プログラムの出力は次のようになります (入力の組み合わせの場合)。
後で最大限の柔軟性を持って探索できるように、n 次元配列を生成したいと思います。上記の例では、次のような配列にする必要があります。
ここで、最初の軸はinput1(1 つの値)、2 番目の軸はinput2(4 つの値) などであり、最後の軸にはすべてのデータ[input1, input2, input3, input4, input5, output1, output2, output3](5 + 3 = 8 つの値) が含まれます。この例では、説明のように整形された 4 x 10 x 8 = 320 値の配列になります。
私の質問は次のとおりです。28 個のネストされたforループを手動で記述せずに、この構造を生成してからデータを入力する (各軸を反復処理する) にはどうすればよいですか?
それとも、私のデータ構造が正しくなく、より良い解決策が存在するのでしょうか?
私は pandas を使用したソリューションを受け入れています (パラメーター名を文字列として処理できるようにしたいため)。または単純な python 辞書。ボトルネックは各シミュレーションの計算時間 (定常状態に到達する必要がある) であり、シミュレーション間に数ミリ秒を費やす余裕があるため、実行速度はそれほど重要ではありません。
また、どのパラメーターを固定し、どのパラメーターを可変にするか (およびそれらの値の数) を選択する方法にも柔軟性が必要です。
c++ - 任意のエクステントの n 次元配列を反復処理する最速の方法は?
C++ では、それぞれ min[n] から max[n] までの範囲の任意の範囲で n 次元配列を反復処理し、縦座標を ord[n] 全体でそれぞれ維持したいと考えています。
すなわち。次の一般的な解決策:
フォームの:
私が考えることができる iterate() の最速のアルゴリズムは次のとおりです。
これにより、必要に応じて各縦座標がインクリメントおよびリセットされ、コールスタックや計算が回避されます。
より高速なアルゴリズムはありますか?
arrays - ND 配列の指定された次元にアクセスする
MATLAB に 3D 配列があります。
3 番目の次元は 120 レベルの深さ (0 - 5 - 10 ..) で、1400 と 720 は深さの各レベルの値を持つ地理グリッドです。3 次元のインデックス (深さ = 5 の例) で指定された特定のレイヤーを 2D マトリックスの形式で取得したいと考えています。
スクイーズ関数は 3 番目の次元の特定の数にアクセスせず、私の 2D マトリックスは次のようになります。
レイヤー、つまり [1440 720] マトリックスの 5m にアクセスするにはどうすればよいですか?