Python 将数组作为索引传递给另一个数组?

Python 将数组作为索引传递给另一个数组?,python,arrays,matlab,numpy,image-processing,Python,Arrays,Matlab,Numpy,Image Processing,好的,我正在写一些用于图像处理的代码,其中大部分是从一些旧的matlab代码转换而来的,用于相同的过程。此时(流程的最后一步),我需要将一个数组作为索引传递给另一个数组 一点背景:我将图像分成RGB波段或遮罩。在前面的代码中,我拍摄了所有的图像(作为numpy数组),并沿第三维方向取了一个中间值。我试图将RGB掩码作为参数传递,这样我就可以得到这些像素值的中值,并用0代替RB像素 Matlab中实现这一点的代码非常简单: finalMedGreen_ROI(exp_i+1) = median(m

好的,我正在写一些用于图像处理的代码,其中大部分是从一些旧的matlab代码转换而来的,用于相同的过程。此时(流程的最后一步),我需要将一个数组作为索引传递给另一个数组

一点背景:我将图像分成RGB波段或遮罩。在前面的代码中,我拍摄了所有的图像(作为numpy数组),并沿第三维方向取了一个中间值。我试图将RGB掩码作为参数传递,这样我就可以得到这些像素值的中值,并用0代替RB像素

Matlab中实现这一点的代码非常简单:

finalMedGreen_ROI(exp_i+1) = median(median(EXPMedian_ROI(GMask_ROI)));
其中,GMask_ROI是一个数组,它是原始图像数据的感兴趣区域,EXPMINA_ROI是所有原始图像数据的中值)

我尝试在python中复制这一点:

self.final_median_green_roi[image+1] = np.median(np.median(self.exposure_median_roi(self.green_mask_roi)))
我得到了这个错误:

TypeError: 'numpy.ndarray' object is not callable
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我试图在np.median中将两个数组作为参数传递。事情是这样的,self.green\u mask\u roi是一个布尔值数组(对于绿色像素为true,对于其他所有像素为false。当我运行此命令时:

self.final_median_green_roi[0,1] = np.median(np.median(self.dark_median_roi,self.green_mask_roi))
我得到了这个错误:

TypeError: 'numpy.ndarray' object is not callable
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

我不确定这是对布尔数组还是数字中值数组的建议,我宁愿把它弄对,因为我对图像处理是新手,不太可能犯错误。有什么建议吗?

使用numpy的内置掩码数组:

...  =np.median(np.median(np.ma.masked_array(self.dark_median_roi‌​, self.green_mask_roi)))

这将创建一个新的数组,方法是制作第二个参数self.green\u mask\u roi的掩码,并将其应用于第一个self.dark\u median\u roi,这样您就可以得到一个数组,该数组包含self.dark\u median\u roi的所有原始元素,这些元素也存在于self.green\u mask\u roi中。

请澄清您试图通过放置dark\u me来实现的目标dian_roi和green_mask_roi。您无法执行示例中的操作,因为它们都是数组。在示例中,EXPMedianROI是一种在GMask_roi上调用的方法。数组是原始图像数据(以RGGB值表示的图像)。我试图做的是收集每个绿色像素的中值。然后将中值传递到更多次,以将其压缩为单个值。因此,是否要查找组合两个阵列的中值?(并集还是交集?)就像我说的,其中一个数组充满了布尔值,所以我想更好的方法是关闭第一个数组中第二个数组中为false的所有值。
callable
错误意味着对数组使用
arr(idx)
语法,而不是正确的索引,
arr[idx]
。记住索引语法在
numpy
中是不同的。要么你们在应该使用函数的地方使用数组。我第一次运行它时,它说这对int和generator表达式是无效的操作。所以我把它放在np.array语句中,但在它周围有一些括号,我得到了这个er再次出错:
ValueError:包含多个元素的数组的真值不明确。请使用a.any()或a.all()
尝试以下操作:
=np.median(np.median(np.ma.masked\u array(self.dark\u median\u roi,self.green\u mask\u roi)))
另外,这两个数组的尺寸是多少?我一直假设它们是一维的,很高兴听到!我将编辑答案,如果你能将其标记为已接受答案,那将非常棒。它们都是成型的(200200)