用另一个数组操作一个 numpy 数组

manipulating a numpy array with another array

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

我有一张灰度图 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: only integer scalar arrays can be converted to a scalar index"

感谢您的启发:)

我想我找到了一个不使用 for-loop 的解决方案。如果这是一个问题,它可能会节省您的时间,但不会节省存储空间。给定一个二维数组 A 和一个一维数组 rowrow的维度是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已设置为零。奇迹发生在 rowmask = rowidx > row 行,它创建了掩码。剩下的就直说了。

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

rowidx,colidx = np.indices(BlurredFlip)
rowmask = rowidx > minCoords
BlurredFlip[rowmask] = 0