Pythonで大きな正方形の配列(n、n)から小さな正方形の配列(m、m)をコピーする

リチャードホール

配列があるとします。

from numpy import *
x = range(16)
x = reshape(x,(4,4))

print x
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]

そしてx、(行/列のインデックスではなく)その行列のサイズを定義することによって、常に中央に配置される小さな配列のコピーを取得したいと思います。

たとえば、これから2x2配列が必要な場合は、次のようになります。

[[5  6]
 [9 10]]

私の目的のために、私の初期配列はより大きく(4096x4096)、サイズ(128x128)、(256x256)、(512x512)、(1024x1024)、(2048x2048)の中央の正方形配列のコピーを取りたいと思います。

また、元の配列を保持したいので、必ずしも元の行/列をスライスする必要はありません。代わりに、元のコピーのみをトリミングして、新しい変数に保存する必要があります。

私は次のようないくつかの変数を定義することを考えていました:(2x2の場合):

rows_to_keep = [1,2]
cols_to_keep = [1,2]

その後、

x[np.ix_(rows_to_keep, columns_to_keep)]

しかし、これがrows_to_keep最大2048の数値のリストである場合、これは実用的ではなくなります。たとえば、元の4096x4096から128x128の正方形をコピーするには、1984年の行/列から2112までのインデックスのリストを作成できます。

size_to_keep = 128
indices = np.linspace(0, size_to_keep, size_to_keep, endpoint=False)

rows_to_keep = [(4096/2)-(size_to_keep/2) + i for i in indices]
cols_to_keep = [(4096/2)-(size_to_keep/2) + i for i in indices]

copy_array = x[np.ix_(rows_to_keep, columns_to_keep)]    

しかし、これも厄介/非現実的になります。私はこれを行うためのよりパイソン的な方法があることを望んでいましたか?前もって感謝します

norok2

すべてのインデックスは連続しているため、適切なを使用できますslice明らかに、極値の計算を避けることはできませんが、それだけです。

これは次の形式をとることができます(任意の整数値で機能することを確認するためのコードを含むsize):

def get_center(arr, size):
    mask = tuple(
        slice(int(dim / 2 - size / 2), int(dim / 2 + size / 2))
        if 0 < size < dim else slice(None)
        for dim in arr.shape)
    return arr[mask].copy()

これは次のように簡単に使用できます。

import numpy as np
dim = 4
x = np.arange(dim * dim).reshape((dim, dim))
y = get_center(x, 2)
# [[ 5,  6],
#  [ 9, 10]]

期待どおりに動作しますが、それほど多くのメモリを消費することはありません。

もちろん、極値を調整して、奇妙なケースを好きなように処理することもできます(質問では実際には定義されていません)。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

内側の正方形の配列を動かさずに、外側のN xNの正方形の配列を回転させます

分類Dev

線形配列pythonからの正方形配列

分類Dev

2d numpy配列内の正方形の合計(正方形を形成する4つの値)。Python

分類Dev

固定サイズの大きな正方形で動的な同じサイズの小さな正方形グリッドを作成します

分類Dev

正方形を取り、それをN個の同じサイズの小さな正方形に分割し、それらの中心の座標を返します

分類Dev

配列を正方形配列に再形成するPython

分類Dev

JavaScriptで正方形の2D配列の色を描画/更新する高速な方法

分類Dev

2D配列で内側の正方形を回転させる

分類Dev

この正方形が正方形ではないのはなぜですか?

分類Dev

正方形の配列の中心を探しています

分類Dev

小さな正方形の中に円を埋める方法は?

分類Dev

このコードが正方形のみを回転させるのはなぜですか?

分類Dev

特定の正方形から連続する正方形を数える

分類Dev

配列とmallocで実行される基本的な正方形関数

分類Dev

なぜピクセルは正方形なのですか?

分類Dev

Openglで異なる色の正方形から長方形を描く

分類Dev

Pythonで2次元の正方形のnumpy配列を45度回転させる方法は?

分類Dev

長方形/正方形の領域をより大きな領域に結合する-imshow / python

分類Dev

3つの水平方向の正方形|正方形| |正方形| |正方形| cssを使用する

分類Dev

形状(200、200)のNumpy配列をプロットすると、正方形ではなく垂直線が表示されます

分類Dev

大きな非正方形のnumpy行列を物理的に転置する

分類Dev

私の仕事は、正方形などのフレーム内に文字列を印刷することです

分類Dev

Cで与えられた大きな範囲の完全な正方形の数を計算します

分類Dev

wxpython:隅にある小さな正方形のパネル

分類Dev

小さな正方形に地図を表示するGoogleMaps Javascript API

分類Dev

nかどうかを見つける!+1は完全な正方形です

分類Dev

修正された正方形の正方形の数を決定する

分類Dev

ブール値のような正方形の対称numpy配列からのTrue値を使用してストアインデックスペアを格納するにはどうすればよいですか?

分類Dev

異なる高さの正方形をブートストラップする

Related 関連記事

  1. 1

    内側の正方形の配列を動かさずに、外側のN xNの正方形の配列を回転させます

  2. 2

    線形配列pythonからの正方形配列

  3. 3

    2d numpy配列内の正方形の合計(正方形を形成する4つの値)。Python

  4. 4

    固定サイズの大きな正方形で動的な同じサイズの小さな正方形グリッドを作成します

  5. 5

    正方形を取り、それをN個の同じサイズの小さな正方形に分割し、それらの中心の座標を返します

  6. 6

    配列を正方形配列に再形成するPython

  7. 7

    JavaScriptで正方形の2D配列の色を描画/更新する高速な方法

  8. 8

    2D配列で内側の正方形を回転させる

  9. 9

    この正方形が正方形ではないのはなぜですか?

  10. 10

    正方形の配列の中心を探しています

  11. 11

    小さな正方形の中に円を埋める方法は?

  12. 12

    このコードが正方形のみを回転させるのはなぜですか?

  13. 13

    特定の正方形から連続する正方形を数える

  14. 14

    配列とmallocで実行される基本的な正方形関数

  15. 15

    なぜピクセルは正方形なのですか?

  16. 16

    Openglで異なる色の正方形から長方形を描く

  17. 17

    Pythonで2次元の正方形のnumpy配列を45度回転させる方法は?

  18. 18

    長方形/正方形の領域をより大きな領域に結合する-imshow / python

  19. 19

    3つの水平方向の正方形|正方形| |正方形| |正方形| cssを使用する

  20. 20

    形状(200、200)のNumpy配列をプロットすると、正方形ではなく垂直線が表示されます

  21. 21

    大きな非正方形のnumpy行列を物理的に転置する

  22. 22

    私の仕事は、正方形などのフレーム内に文字列を印刷することです

  23. 23

    Cで与えられた大きな範囲の完全な正方形の数を計算します

  24. 24

    wxpython:隅にある小さな正方形のパネル

  25. 25

    小さな正方形に地図を表示するGoogleMaps Javascript API

  26. 26

    nかどうかを見つける!+1は完全な正方形です

  27. 27

    修正された正方形の正方形の数を決定する

  28. 28

    ブール値のような正方形の対称numpy配列からのTrue値を使用してストアインデックスペアを格納するにはどうすればよいですか?

  29. 29

    異なる高さの正方形をブートストラップする

ホットタグ

アーカイブ