2016-11-20 153 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 

我想打印这个矩阵X的3×3子阵列,独立的我选择的α为(独立的3×3方形或5×5正方形矩阵等)。如下所示。

回答

1

如果阵列中的所有值都是唯一的(因为它们是在这两个例子中你的问题):

​​

这个代码是找到在2D (i, j)指数数组,使X[i,j]等于beta的值。因此X[i-1:i+2,j-1:j+2]是3x3数组,其中beta值在中心,除非beta位于矩阵的边缘。

要获得所有可用值甚至在边缘:

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)索引。在我以前的评论中的显式条件显示了如何找出beta是否在边缘(通过检查它的下标: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)