以下是一个可以从两个给定的matry返回子级的函数。对于两个输入值,生成这些子级的位置是相同的。输入值为Numpy array
。我只想知道是否有更优雅的方法来完成与此功能相同的任务类型。
def seg(ma1,ma2,size):
rowN = len(ma1)
colN = len(ma1[0])
dim1 = random.randint(0,rowN-size)
dim2 = random.randint(0,colN-size)
return ma1[dim1:dim1+size,dim2:dim2+size], ma2[dim1:dim1+size,dim2:dim2+size]
答案 0 :(得分:0)
作为一种替代方法,我们可以使用np.ix_
创建索引范围,并使用这些索引编入输入数组,如下所示 -
idx = np.ix_(np.arange(size)+dim1,np.arange(size)+dim2)
out = ma1[idx], ma2[idx]
可以使用np.mgrid
建议另一种方法来创建密集的行和列索引。这将需要比前一个更多的内存,但可能更接近原始代码。这是它的样子 -
R,C = np.mgrid[dim1:dim1+size,dim2:dim2+size]
out = ma1[R,C], ma2[R,C]
另一种将优雅“转移”到np.mgrid
并将工作量推入后一个索引部分的方法就像这样 -
R,C = np.mgrid[:size,:size]
out = ma1[R+dim1,C+dim2], ma2[R+dim1,C+dim2]
答案 1 :(得分:0)
您可能希望rowN, colN = ma1.shape
代替
rowN = len(ma1)
colN = len(ma1 [0])
此外,您可能希望为随机数生成器播种。