[解決済み] numpyを使用して2つの配列のすべての組み合わせの配列を構築する
2022-04-28 17:31:26
質問
複雑なことをする前に、6パラメータ関数のパラメータ空間を調べて、数値的な挙動を調べたいので、これを実行する効率的な方法を探しています。
私の関数は、6次元のnumpy配列で与えられたfloat値を入力として受け取ります。私が最初に行おうとしたことは、次のようなことでした。
まず、2つの配列を受け取り、2つの配列の値のすべての組み合わせで配列を生成する関数を作りました。
from numpy import *
def comb(a,b):
c = []
for i in a:
for j in b:
c.append(r_[i,j])
return c
次に
reduce()
を使用して、同じ配列の m 個のコピーに適用します。
def combs(a,m):
return reduce(comb,[a]*m)
最後に、このような関数を評価する。
values = combs(np.arange(0,1,0.1),6)
for val in values:
print F(val)
これは動作しますが
方法
が遅すぎる。パラメータの空間が巨大であることは分かっていますが、これほど遅くはないはずです。私は10個しかサンプリングしていない
6
(100万)点の配列を作成するだけで、15秒以上かかりました。
values
.
numpyでもっと効率的な方法はないでしょうか?
を変更することができます。
F
は、必要であれば引数を取ります。
どのように解決するのですか?
の新しいバージョンでは
numpy
(>1.8.x)です。
numpy.meshgrid()
は、より高速な実装を提供します。
pvのソリューション
In [113]:
%timeit cartesian(([1, 2, 3], [4, 5], [6, 7]))
10000 loops, best of 3: 135 µs per loop
In [114]:
cartesian(([1, 2, 3], [4, 5], [6, 7]))
Out[114]:
array([[1, 4, 6],
[1, 4, 7],
[1, 5, 6],
[1, 5, 7],
[2, 4, 6],
[2, 4, 7],
[2, 5, 6],
[2, 5, 7],
[3, 4, 6],
[3, 4, 7],
[3, 5, 6],
[3, 5, 7]])
numpy.meshgrid()
は2Dのみでしたが、NDが可能になりました。この場合、3Dです。
In [115]:
%timeit np.array(np.meshgrid([1, 2, 3], [4, 5], [6, 7])).T.reshape(-1,3)
10000 loops, best of 3: 74.1 µs per loop
In [116]:
np.array(np.meshgrid([1, 2, 3], [4, 5], [6, 7])).T.reshape(-1,3)
Out[116]:
array([[1, 4, 6],
[1, 5, 6],
[2, 4, 6],
[2, 5, 6],
[3, 4, 6],
[3, 5, 6],
[1, 4, 7],
[1, 5, 7],
[2, 4, 7],
[2, 5, 7],
[3, 4, 7],
[3, 5, 7]])
最終的な結果の順序が少し違うことに注意してください。
関連
-
Python Decorator 練習問題
-
[解決済み】RuntimeWarning: 割り算で無効な値が発生しました。
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み] NumPyの配列を切り詰めずに、完全に表示するにはどうしたらよいですか?
-
[解決済み] JavaScriptの配列で一意な値をすべて取得する(重複を排除する)。
-
[解決済み] 配列の反復処理に "for...in "を使用するのは、なぜ良くないのでしょうか?
-
[解決済み] 配列の結合/平坦化
-
[解決済み] JavaScriptで2次元の配列を作成するにはどうすればよいですか?
-
[解決済み] NumPy の配列を csv ファイルにダンプする
-
[解決済み】JavaScriptで2つの配列を結合し、項目の重複を排除する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
pythonを使ったオフィス自動化コード例
-
Python Decorator 練習問題
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
Pythonコードの可読性を向上させるツール「pycodestyle」の使い方を詳しく解説します
-
pyCaret効率化乗算器 オープンソース ローコード Python機械学習ツール
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み】ImportError: bs4という名前のモジュールがない(BeautifulSoup)
-
[解決済み】一連のリストのデカルト積を取得する?
-
[解決済み] pandas DataFrameのカラムを複数行にアンネスト(分解)する方法
-
[解決済み] xとyの配列点のデカルト積を1つの2次元点配列にしたもの