Python 标准化4D阵列的最有效方法是什么?
我有一个4D阵列的形状(4320328279),它实际上是一个由4个3D图像堆栈组成的数据集 我试图实现的是在所有样本之间规范化每个3D图像的每个像素。假设四幅图像中坐标为(0,0,0)的第一个像素值为[140,20,10,220]。我想将这些值更改为:[0.61904762,0.04761905,0,1.] 我写了一个脚本,据说实现了这一点:Python 标准化4D阵列的最有效方法是什么?,python,numpy,Python,Numpy,我有一个4D阵列的形状(4320328279),它实际上是一个由4个3D图像堆栈组成的数据集 我试图实现的是在所有样本之间规范化每个3D图像的每个像素。假设四幅图像中坐标为(0,0,0)的第一个像素值为[140,20,10,220]。我想将这些值更改为:[0.61904762,0.04761905,0,1.] 我写了一个脚本,据说实现了这一点: def NormalizeMatrix(mat) : mat = np.array(mat); sink = mat.copy();
def NormalizeMatrix(mat) :
mat = np.array(mat);
sink = mat.copy();
for i in np.arange(mat.shape[1]) :
for j in np.arange(mat.shape[2]) :
for k in np.arange(mat.shape[3]) :
PixelValues = mat[:,i,j,k];
Min = float(PixelValues.min());
Max = float(PixelValues.max());
if Max-Min != 0. :
sink[:,i,j,k] = (PixelValues - Min) / (Max - Min);
else :
sink[:,i,j,k] = np.full_like(PixelValues, 0.);
return sink;
但这真的很慢
我怎样才能使它更快
有什么想法吗
Tom我想我最终找到了一个非常快速的方法,实际上是以用户3483203的方式:
def NormalizeMatrix(mat) :
mat = np.array(mat);
minMat = np.min(mat, axis=0, keepdims=1);
maxMat = np.max(mat, axis=0, keepdims=1);
sink = (mat - minMat)/ (maxMat - minMat);
return sink;
这在我的机器上需要5-10秒而不是几个小时:)使用
mx=mat.max(0);mn=材料最小值(0);(mat-mn)/(mx-mn)
规格化是基于整个数组的最小值和最大值,还是仅仅基于四个像素?您的矩阵是什么数据类型?我猜这些是无符号8位整数,对于灰度图像?