首页 > 解决方案 > 将循环转换为 Java 中的矢量化计算

问题描述

我想将此部分转换为向量以便更快地计算,例如 NumPy Nd 数组。因此,实际的 FPS 正在下降。

我们如何才能实现或做得更好?

public static List<Double> rgbMean (Mat mat) {
  double R=0,G=0,B=0,ctr=0;
  for (int i=0; i<480; i++) {
    for (int j=0; j<640; j++) {
        double[] d = mat.get(i, j);
        R += d[0];
        G += d[1];
        B += d[2];
        ctr+=1;
    }
 }
 double R_ch = R/ctr ;
 double G_ch = G/ctr ;
 double B_ch = B/ctr ;
}

标签: pythonandroidnumpy-ndarray

解决方案


给定具有任意数量通道的 2D 矩阵(图像),您可以使用Numpy mean函数:

import numpy as np
n, m, c = 480, 640, 3

mat = np.random.random((n, m, c))

average = np.mean(mat, axis=-1)
# Output n x m

但是,如果要分别计算 R、G、B 通道中所有值的平均值并生成 3 个数字,则可以使用:

np.mean(mat.reshape(-1, c), axis=0)
# Output: 1 x c

推荐阅读