繁体   English   中英

在对numpy数组进行逻辑索引之后保持2D结构

[英]Maintain 2D structure after logical indexing a numpy array

我正在跟踪一个动态变化的蒙版,它使用一些输入移动来滚动。 此掩码存储的值确定了我可以信任另一个具有相同形状的数组中的值的位置。 下面是掩码如何在每次迭代中发生变化的示例。 我有一大堆逻辑检查,确定如何根据shift的x和y值是等于0还是正或负来将屏蔽的滚动部分设置为零。 在这里,我只是为了清晰而硬编码。

import numpy as np
mask = np.full((8,8), 10)

#Iteration 1
mask = np.roll(mask, (0, 1), axis = (0,1))
mask[:, :1] = 0
#logical indexing happens here
mask += 1
print (mask)

#Iteration 2
mask = np.roll(mask, (1, 0), axis = (0,1))
mask[:1, :] = 0
#logical indexing happens here
mask +=1
print (mask)

#Iteration 3
mask = np.roll(mask, (2, -1), axis = (0,1))
mask[:, -1:] = 0
mask[:2, :] = 0
#logical indexing happens here
mask +=1
print (mask)

在每次迭代之后并且在掩码增加1之前,我需要索引并拉出掩码高于某个阈值的第二个数组的值(在这种情况下为10)。 由于我正在滚动并设置值,我总是知道满足此条件的掩码部分可以广播到二维数组中。 我现在正在做的一个简化示例是arr2是一个扁平数组。

import numpy as np

arr1 = np.arange(0, 64, 1).reshape((8,8))
mask = np.full((8,8), 10)
mask[:, 0] = 0

arr2 = arr1[mask >= 10]

如何将arr2保持为掩码高于设定阈值的二维数组?

我不知道应用于掩模的移位是什么,因此我必须依赖掩码中的值来确定结果数组的形状。 我的数组比这个例子大得多,并且移位在-5和5之间,所以我知道我不会接近将整个数组设置为低于阈值。 这个想法是在大约10次迭代之后,数组的某些部分再次变得值得信赖,并且在逻辑索引之后可以是有用的信息。

这里的答案是一个解决方法,现在很明显,它已经在我脑海中酝酿了一段时间。 基本上,因为我知道结果区域将是正方形,所以我可以计算每个索引满足条件的行和列。 所以继续我之前的例子,我只需添加几行来确定行和列中有多少值符合我的条件。

import numpy as np
#Initializing array
arr1 = np.arange(0, 64, 1).reshape((8,8))
#mask array
mask = np.full((8,8), 10)

#Setting some rows and cols to zero to simulate my roll functionality
mask[:, 0] = 0
mask[:2, :] = 0

#Summing across a row and col where condition is met
sizex = np.sum(mask[4, :] >= 10)
sizey = np.sum(mask[:, 4] >= 10)

#Using the mask to index into the original array and reshaping
arr2 = arr1[mask >= 10].reshape((sizey, sizex))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM