用另一个数组处理一个numpy数组

问题描述

我正在尝试使用方括号和':',同时尝试使用其他索引进行二维索引 因此,如果有人能理顺我,我将感到非常高兴

我有一个灰度图像 BluredFlip形状是:(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:只有整数标量数组才能转换为标量索引”

谢谢您的启发:)

解决方法

我认为我找到了不使用for循环的解决方案。如果这是个问题,可能会节省您的时间,但不会节省存储空间。给定一个2D数组A和一个1D数组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,3,4],[ 0,6,7,8],11,12],16]])

2D数组AA的下三角部分已设置为零。魔术发生在创建遮罩的rowmask = rowidx > row行中。其余的很简单。

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

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