python - 将循环转换为 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 ;
}
解决方案
给定具有任意数量通道的 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
推荐阅读
- security - 错误:Windows 10 上的 Snort 配置验证失败
- flutter - 内存不足..flutter中的dum堆栈跟踪结束
- python - python random.choices 有偏见吗?
- python-3.x - 在没有 for 循环的情况下切片数组
- css - 有没有办法在 React Native App 中的某个点周围创建弯曲视图(或类似视图)?
- c++ - 整数对向量
- html - 使用 JQuery 和 HTML 显示下拉菜单
- background-image - 当图像在右侧时如何消除水平滚动
- php - 如何在php中重复从000到999的序列号并将其保存在txt文件中
- javascript - 如何在 querySelector 中插入 id 的值?