NumPyで2つの配列をフラット化して結合するための冗長でない方法はありますか?

ヌケサブ

私は次のことをしようとしています。

XとYの2つの2D配列があります。それぞれが100x100要素です。それらを10,000x1列に線形化/フラット化してから連結したいので、10,000x2の単一の行列が残ります。MATLABでは、次のことができます

BigMatrix = [X(:) Y(:)]

Pythonでも同じことをしたいです。少し遊んだ後、以下に示すように、非常に冗長な方法ではありますが、MATLABの結果を複製することができました。これを達成するためのより良い、より簡潔な方法はありますか?

BigMatrix = np.concatenate(
    (X.reshape((10000,1), order = 'F'), 
     Y.reshape((10000,1), order = 'F')),
      axis=1)
アポシアン

あなたが望むものを達成するための複数の方法があり、あなたが持っているものは完全に有効です。ただし、他にも「簡潔」な方法がいくつかあります。

使用する np.ndarray.flatten

1次元に折りたたまれた配列のコピーを返します。

列メジャーとして扱うか行メジャーとして扱うかを指定することもできます。

必要な結果(amx 2行列、各平坦化された行列を列として)を取得するには、次を使用できます。 numpy.column_stack

BigMatrix = np.column_stack([X.flatten(order = 'F'), Y.flatten(order = 'F')])

または、@ sspが述べたように、本当に簡潔なものを探している場合はnumpyインデックスルーチン(基本的にスライスに特別な動作を与える)を使用できます連結には2つあり、各軸に1つあります。r_は行方向(最初の軸)c_用で、列方向(2番目の軸)用なので、mx2行列を取得するには次のようにします。

BigMatrix = np.c_[X.flatten(order = 'F'), Y.flatten(order = 'F')]

パフォーマンス?

@hpauljが示唆しているように、パフォーマンスに関しては、元のコードを使用したほうがよい場合があります。これは、3つのメソッドの簡単なタイミングです。各メソッドは、100x100マトリックスのサイズに対して100万回実行されます。

from timeit import timeit

print("c_ w/ flatten", timeit(
    setup="import numpy as np\nX=np.random.standard_normal((100,100))\nY=np.random.standard_normal((100,100))",
    stmt="Z=np.c_[X.flatten(order='F'), Y.flatten(order='F')]"
))

print("column_stack w/ flatten", timeit(
    setup="import numpy as np\nX=np.random.standard_normal((100,100))\nY=np.random.standard_normal((100,100))",
    stmt="Z=np.column_stack((X.flatten(order='F'), Y.flatten(order='F')))"
))

print("concatenate w/ reshape", timeit(
    setup="import numpy as np\nX=np.random.standard_normal((100,100))\nY=np.random.standard_normal((100,100))",
    stmt="Z=np.concatenate((X.reshape((10000,1),order='F'), Y.reshape((10000,1),order='F')), axis=1)"
))

そして私達は得る

c_ w/ flatten            44.47710300699691
column_stack w/ flatten  29.201319813000737
concatenate w/ reshape   27.67507728200144

驚いたことに、column_stackとflattenは同等ですが、インデックスルーチンは大幅に低速です。

(このパフォーマンス分析で見逃したことがあれば、教えてください。私はパフォーマンスの第一人者ではありません)。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Cythonは、Numpy配列をフラットであるかのように反復するための合理的に簡単で効率的な方法を提供しますか?

分類Dev

JSを使用して2つの日付の間のランダムな時間で長さ30の配列を生成する方法はありますか?

分類Dev

単一のタグのみで型をアンラップするためのより冗長な方法はありますか?

分類Dev

JavaScriptで冗長なフィルターステートメントを書くためのより良い方法はありますか?

分類Dev

2つのプロパティでオブジェクトの2つの配列を結合するより良い方法はありますか?

分類Dev

VBAなしでExcelで2つの配列を連結する方法はありますか?

分類Dev

2つの非常に長い配列は、少なくとも一つの共通の要素を持っているかどうかを確認するために最速(ランタイム)方法はありますか?

分類Dev

numpyを使用して、配列内のn行のすべての組み合わせに対して何かを計算する方法はありますか(単純なケースはすべてのペア、つまりn = 2です)

分類Dev

2つのテーブルを結合してから、いくつかの属性でグループ化する方法はありますか?

分類Dev

コードの改良:Javascriptで1つの(短い)配列を別の(長い)オブジェクトの配列にマップするためのより良い方法はありますか?

分類Dev

コードの改良:Javascriptで1つの(短い)配列を別の(長い)オブジェクトの配列にマップするためのより良い方法はありますか?

分類Dev

いつ削除を使用する必要がありますか?(動的に作成された2D配列の後で削除しない場合の結果)

分類Dev

データセットを2つの非冗長なnumpy配列に分割しますか?

分類Dev

2つのリストまたはnumpy配列を比較するより速い方法は何ですか

分類Dev

numpyのパラメトリックな方法でnumpy配列をスライスするより良い方法はありますか?

分類Dev

累積合計が大きくなる配列内のインデックスを見つけるための高速で厄介な方法はありますか?

分類Dev

他のすべての列でゼロをチェックするために、2つの列の値でデータフレームをサブセット化することは同時に互いに等しくなります

分類Dev

文字列を分割して結合するための簡単なワンライナーはありますか?

分類Dev

インターリーブされた「モザイク」パターンを使用して一つの大きな配列に4つの小さな配列を結合するための効率的な方法はありますか?

分類Dev

2つの文字列を連結するために「+」を使用しない理由はありますか?

分類Dev

2つの文字列を連結するために「+」を使用しない理由はありますか?

分類Dev

2D配列を使用して作成された行列で、合計が最大の3つの列と行をマークする方法はありますか?

分類Dev

列幅を考慮してJavaScriptで長い文字列を定義するためのベストプラクティスはありますか?

分類Dev

私のラップトップの統合された画面では、スムーズな動きがぎくしゃくしています。それをテストするためのソフトウェアはありますか?

分類Dev

intで初期化されたchar型の配列の2つの要素を比較する方法はありますか?

分類Dev

冗長な列値で2つのテーブルを結合するにはどうすればよいですか?

分類Dev

Javaで2つの文字列セットを組み合わせるより良い方法はありますか?

分類Dev

含まれているオブジェクトの配列をフラット化しながら、オブジェクトエントリを配列に変換する短い方法はありますか?(私の解決策を改善する)

分類Dev

そのようなnumpy配列を作成するためのより良い方法はありますか?

Related 関連記事

  1. 1

    Cythonは、Numpy配列をフラットであるかのように反復するための合理的に簡単で効率的な方法を提供しますか?

  2. 2

    JSを使用して2つの日付の間のランダムな時間で長さ30の配列を生成する方法はありますか?

  3. 3

    単一のタグのみで型をアンラップするためのより冗長な方法はありますか?

  4. 4

    JavaScriptで冗長なフィルターステートメントを書くためのより良い方法はありますか?

  5. 5

    2つのプロパティでオブジェクトの2つの配列を結合するより良い方法はありますか?

  6. 6

    VBAなしでExcelで2つの配列を連結する方法はありますか?

  7. 7

    2つの非常に長い配列は、少なくとも一つの共通の要素を持っているかどうかを確認するために最速(ランタイム)方法はありますか?

  8. 8

    numpyを使用して、配列内のn行のすべての組み合わせに対して何かを計算する方法はありますか(単純なケースはすべてのペア、つまりn = 2です)

  9. 9

    2つのテーブルを結合してから、いくつかの属性でグループ化する方法はありますか?

  10. 10

    コードの改良:Javascriptで1つの(短い)配列を別の(長い)オブジェクトの配列にマップするためのより良い方法はありますか?

  11. 11

    コードの改良:Javascriptで1つの(短い)配列を別の(長い)オブジェクトの配列にマップするためのより良い方法はありますか?

  12. 12

    いつ削除を使用する必要がありますか?(動的に作成された2D配列の後で削除しない場合の結果)

  13. 13

    データセットを2つの非冗長なnumpy配列に分割しますか?

  14. 14

    2つのリストまたはnumpy配列を比較するより速い方法は何ですか

  15. 15

    numpyのパラメトリックな方法でnumpy配列をスライスするより良い方法はありますか?

  16. 16

    累積合計が大きくなる配列内のインデックスを見つけるための高速で厄介な方法はありますか?

  17. 17

    他のすべての列でゼロをチェックするために、2つの列の値でデータフレームをサブセット化することは同時に互いに等しくなります

  18. 18

    文字列を分割して結合するための簡単なワンライナーはありますか?

  19. 19

    インターリーブされた「モザイク」パターンを使用して一つの大きな配列に4つの小さな配列を結合するための効率的な方法はありますか?

  20. 20

    2つの文字列を連結するために「+」を使用しない理由はありますか?

  21. 21

    2つの文字列を連結するために「+」を使用しない理由はありますか?

  22. 22

    2D配列を使用して作成された行列で、合計が最大の3つの列と行をマークする方法はありますか?

  23. 23

    列幅を考慮してJavaScriptで長い文字列を定義するためのベストプラクティスはありますか?

  24. 24

    私のラップトップの統合された画面では、スムーズな動きがぎくしゃくしています。それをテストするためのソフトウェアはありますか?

  25. 25

    intで初期化されたchar型の配列の2つの要素を比較する方法はありますか?

  26. 26

    冗長な列値で2つのテーブルを結合するにはどうすればよいですか?

  27. 27

    Javaで2つの文字列セットを組み合わせるより良い方法はありますか?

  28. 28

    含まれているオブジェクトの配列をフラット化しながら、オブジェクトエントリを配列に変換する短い方法はありますか?(私の解決策を改善する)

  29. 29

    そのようなnumpy配列を作成するためのより良い方法はありますか?

ホットタグ

アーカイブ