A
という500000x1
配列があるとします。私は1000
等しいセクションにこの配列を分割し、そのセクションの平均を計算したいと思います。そこで、B
という1000x1
という配列になります。B[1]
は、A[1:500]
の平均であり、B[2]
はB [501:1000]の平均です。私はこれを何度もやっていますので、効率的にやりたいと思います。 Matlab/Pythonでこれを行う最も効果的な方法は何ですか?配列の各部分の平均を取る方法
1
A
答えて
3
numpyの/ Pythonの
我々は500
の列を持っているし、その後、第2の軸に沿って平均値を計算するために作り変えることができ -
A.reshape(-1,500).mean(axis=1)
サンプル実行 -
In [89]: A = np.arange(50)+1;
In [90]: A.reshape(-1,5).mean(1)
Out[90]: array([ 3., 8., 13., 18., 23., 28., 33., 38., 43., 48.])
ランタイムテスト:
これらの平均値を得る別の方法は、合計を計算して合計に含まれる要素の数で除算する従来の方法です。これら2つの方法を試してみましょう。
他の方法でもかなり改善が見られます。しかし、それはmean
メソッドでNumPyがデフォルトで浮動小数点型に変換されており、その変換オーバーヘッドがここに現れたからです。
我々はfloat型の入力配列を使用するのであれば、我々は異なると公正なシナリオだろう - 列優先順序付き
In [144]: A = np.arange(500000).astype(float)+1;
In [145]: %timeit A.reshape(-1,500).mean(1)
1000 loops, best of 3: 534 µs per loop
In [146]: %timeit A.reshape(-1,500).sum(1)/500.0
1000 loops, best of 3: 516 µs per loop
MATLAB
を、我々は再構築でしょう500
の行を持ち、その後最初の次元に沿って平均する -
サンプル実行 -
>> A = 1:50;
>> mean(reshape(A,5,[]),1)
ans =
3 8 13 18 23 28 33 38 43 48
ランタイムテスト:
のは、ここにも昔ながらの方法を試してみましょう -
>> A = 1:500000;
>> func1 = @() mean(reshape(A,500,[]),1);
>> timeit(func1)
ans =
0.0013021
>> func2 = @() sum(reshape(A,500,[]),1)/500.0;
>> timeit(func2)
ans =
0.0012291
関連する問題
- 1. 各(サブ)列の平均値を取得
- 2. 多次元配列の各行の平均を計算する方法
- 3. Excel:別の列に基づいた列の部分の平均
- 4. 各行に2列の平均値を取る
- 5. 配列の一部の平均を計算する
- 6. サブセットの部分集合の平均
- 7. numpy配列の列の平均を取る
- 8. matlabのセル配列平均
- 9. 各色の各列の平均BGR値を調べる
- 10. 部分区間Pythonの平均
- 11. 平均YTD取得方法
- 12. seaborn.factorplotのようなpandas.dataframeの各グループの平均を取得する方法
- 13. Android AudioRecord - 1分間平均音量を取得する方法
- 14. 配列の平均を計算する
- 15. 配列の平均を計算する
- 16. Cを使用してデータテーブルの各列の平均を見つける方法#
- 17. 平均の平均 - 異なるサンプルサイズの平均を集計する方法
- 18. バイナリツリーの各レベルの平均
- 19. matlabのセル配列の平均行列
- 20. 分の平均値を取得
- 21. numpy配列の複数軸の平均を取得する
- 22. 1次元配列の数値の平均を取る
- 23. 配列値をフィルタリングして平均値を取得する方法
- 24. 各ユーザーの平均値を数える方法は?
- 25. 配列を使用してExcelの平均ローリング差を取る?
- 26. 配列から平均平方和を得る
- 27. MongoDBのGET平均各arrayelement
- 28. データフレーム内の配列列のインデックスで平均を計算する方法
- 29. パンダ - 各グループ内の非マッチのマッチマイナス平均値の平均
- 30. SQLの各条件の平均を返す方法
おそらく 'リシェイプ(A、[]、1000)'多くを作ります感覚、質問の定義を与えて –
@ルイスメンド私は各セクションの長さを使用する別の方法を見ていたと思う。 – Divakar
'np.mean(x)'は基本的に 'np.sum(x、dtype = float)/ 500'と同じです。 'dtype'を持たない' sum'は、 'float64'を追加するのではなく' uint32'を追加するので、オーバーフローの危険があります。それはmatlabがスマートであることではない、それはより慎重であるということです – Eric