1

我正在用括号和':'来做我的头,同时试图用另一个索引做二维索引所以如果有人能理顺我,我会很高兴

我有一个灰度图像 BlurredFlip 形状是:(480, 640) 然后我用过

minCoords = np.argmin(BlurredFlip, axis=0)

它创建了一个一维数组,毫不奇怪,第一行具有每列的最小值,例如

minCoords = [292 289 289 287 287 .......

现在我想将超出此行值的每个像素设置为黑色 - 在 python 中不使用循环相当于

    BlurredFlip[292:479, 0] = 0
    BlurredFlip[289:479, 1] = 0
    BlurredFlip[289:479, 2] = 0
    BlurredFlip[287:479, 3] = 0

  and so on. 

在伪代码中

for col in 1 to maxcol
   BlurredFlip[minCoords[col]:imageheight, col] = 0  

我似乎无法像这样两次引用该列。但我可以告诉你很多方法来获得无用的错误“TypeError:只有整数标量数组可以转换为标量索引”

感谢您的任何启发:)

4

1 回答 1

0

我想我找到了一个不使用 for 循环的解决方案。如果这是一个问题,它可能会节省您的时间,但不会节省存储空间。给定一个二维数组A和一个一维数组row。的维度row是 的列数A。对于列i,我们将行号大于row[i]零的条目设置为。考虑以下代码:

import numpy as np
AA  = np.arange(16).reshape(4,4)+1;
row = np.asarray([0,1,2,3]);
rowidx, colidx = np.indices(AA.shape);
rowmask = rowidx > row;
AA[rowmask] = 0;

输出是

AA = array([[ 1,  2,  3,  4],
       [ 0,  6,  7,  8],
       [ 0,  0, 11, 12],
       [ 0,  0,  0, 16]])

二维数组的下三角部分AA已设置为零。魔术发生在 linerowmask = rowidx > row中,它创建了掩码。其余的都是直截了当的。

对于您的情况,解决方案是

rowidx,colidx = np.indices(BlurredFlip)
rowmask = rowidx > minCoords
BlurredFlip[rowmask] = 0
于 2020-09-25T08:40:30.463 回答