【发布时间】:2014-01-10 12:31:56
【问题描述】:
假设我在 numpy 中有一个 100x100 的数组,我想从这个数组中选择 10 个 (x*x) 的随机块 像素并同时更改这些块的值。为每个块索引切片的最佳方法是什么?一个理想的解决方案是按照下面的思路,在元组对之间进行切片。
A = np.ones(100,100)
blockSize = 10
numBlocks = 15
blockCenter_Row = tuple(np.random.randint(blockSize,high=(100-blockSize),size=numBlocks))
blockCenter_Col = tuple(np.random.randint(blockSize,high=(100-blockSize),size=numBlocks))
rowLeft_Boundary = tuple((i-blockSize/2) for i in blockCenter_Row)
rowRight_Boundary = tuple((i+blockSize/2) for i in blockCenter_Row)
colLower_Boundary = tuple((i-blockSize/2) for i in blockCenter_Row)
colUpper_Boundary = tuple((i+blockSize/2) for i in blockCenter_Row)
for value in range(10):
A[rowLeft_Boundary:rowRight_Boundary,colLower_Boundary:colUpper_Boundary] = value
【问题讨论】:
-
块的重叠怎么处理?
-
我不确定您所说的“最佳方式”是什么意思:写起来不那么麻烦,索引速度更快,创建索引速度更快,...?因为除了最后一行中
*_Boundary变量上缺少索引之外,这似乎工作正常。 -
我在这个例子中犯了一点错误,理想情况下应该计算块的中心,以便在最终实现中没有重叠。
标签: python arrays numpy tuples slice