2016-11-20 11 views
0

下記のコードは、以下で説明するように非常に特殊なケースで正しく動作します。私はそれを一般化したい。私は配列のサブ配列を出力しようとしています。配列のサブ配列を出力する

import numpy as np 

alpha = input("input this number... ") 
X = np.arange(alpha**2).reshape(alpha,alpha) #square matrix 

beta = input("a number in the matrix X") 

if(beta > alpha**2): 
    print("must pick number inside array"), exit() 

print(X) #correct square matrix 

00 01 02 03 04 
05 06 07 08 09 
10 11 12 13 14 
15 16 17 18 19 
20 21 22 23 24 

私は(ETC、3x3の正方形または5×5の正方行列とは無関係)であるアルファを選択するものとは独立して、この行列Xの3×3サブアレイを印刷します。以下に示すように。

答えて

1

を(彼らはあなたの質問に両方の例にあるよう)アレイ内のすべての値が一意である場合:

は ​​

このコードは、2Dで(i, j)インデックスを検索しますX[i,j]beta値に等しいような配列従って、X[i-1:i+2,j-1:j+2]は、betaが行列の端になければ、中央にbeta値を持つ3x3配列です。

も、エッジで利用可能なすべての値を取得するには:

print(X[max(i-1,0):i+2,max(j-1,0):j+2]) 
+0

@Integralsエッジは何ですか? 'i == 0またはj == 0またはi ==(alpha-1)またはj ==(alpha-1)'です。 – jfs

+0

@Integralsとても基本的です。答えのコードは(i、j)インデックスを取得する方法を示しています。私の前のコメントの明示的な条件は、「ベータ」が端にあるかどうかを調べる方法を示しています(指標を調べることによって:i、j)。あなたが私のコメントを理解していない場合。入力値 'beta'が平方numpy配列の端にあることを検出する方法について別の質問をしてください。 – jfs

+0

@Integrals私のコメントは、そのまま動作する条件の間で 'または'を使用します:カンマで置き換えてはいけません。あなたはPythonで本(すべての本)を読むべきです。簡単な問題に悩まされないようにする時間を節約します。 [Pythonタグの説明にフリーの書籍のリスト]があります(http://stackoverflow.com/tags/python/info) – jfs

1

あなたは試すことができます:

import numpy as np 

alpha = input("input this number... ") 
X = np.arange(alpha**2).reshape(alpha,alpha) #square matrix 

beta = input("a number in the matrix X") 
if(beta > alpha**2): 
    print("must pick number inside array"), exit() 
row, col = beta // alpha, beta % alpha # This will give you the idxs of beta number in array 
subsize = input("a size of submatrix you want to get") 
border = (subsize - 1) // 2 

subrand = np.array(X)[row - border: row + border + 1, col - border: col + border + 1] 
print(subrand)