向量化矩阵的min()

drjrm3

我希望对以下循环进行矢量化处理:

for (i in 1:n) {
    for (j in 1:m) {
        temp_mat[i,j]=min(temp_mat[i,j],1);
    }
}  

我以为我可以做到temp_mat=min(temp_mat,1),但这并没有给我想要的结果。有没有一种方法可以向量化此循环以使其更快?

李哲源

只需使用temp_mat <- pmin(temp_mat, 1)有关?pmin更多信息,请参阅参考资料

例子:

set.seed(0); A <- matrix(sample(1:3, 25, replace = T), 5)
#> A
#     [,1] [,2] [,3] [,4] [,5]
#[1,]    3    1    1    3    3
#[2,]    1    3    1    2    3
#[3,]    2    3    1    3    1
#[4,]    2    2    3    3    2
#[5,]    3    2    2    2    1
B <- pmin(A, 2)
#> B
#     [,1] [,2] [,3] [,4] [,5]
#[1,]    2    1    1    2    2
#[2,]    1    2    1    2    2
#[3,]    2    2    1    2    1
#[4,]    2    2    2    2    2
#[5,]    2    2    2    2    1

更新

由于您具有计算科学的背景,因此我想提供更多信息。

pmin速度很快,但远非高性能。其前缀“ parallel”仅表示element-wiseR中“矢量化”的含义与HPC中的“ SIMD矢量化”不同。R是一种解释型语言,因此R中的“向量化”意味着选择C级循环而不是R级循环。因此,pmin仅使用一个简单的C循环进行编码。

真正的高性能计算应受益于SIMD向量化。我相信您知道SSE / AVX内在函数。因此,如果您使用_mm_min_pdfrom编写一个简单的C代码,则from的SSE2速度将是〜的2倍pmin如果_mm256_min_pd从AVX看到,则将获得〜4倍的加速pmin

不幸的是,R本身不能执行任何SIMD。在做矢量化计算时R是否会利用SIMD的帖子有一个答案关于这个问题。对于您的问题,即使将R链接到HPC BLAS,pmin也不会因为pmin不涉及任何BLAS操作而从SIMD中受益因此,更好的选择是自己编写编译后的代码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

向量化每行矩阵

来自分类Dev

“向量化”矩阵乘法

来自分类Dev

矩阵乘法的向量化

来自分类Dev

矩阵的部分向量化和去向量化

来自分类Dev

在MATLAB中向量化矩阵的加权和

来自分类Dev

MATLAB向量化:计算邻域矩阵

来自分类Dev

R加快对方矩阵的向量化

来自分类Dev

在张量内向量化矩阵乘法

来自分类Dev

向量化和嵌套矩阵乘法

来自分类Dev

如何向量化此矩阵运算?

来自分类Dev

向量化矩阵行中的哪个运算

来自分类Dev

如何描述向量化矩阵的乘法?

来自分类Dev

获取向量化矩阵的相应坐标

来自分类Dev

MATLAB向量化:计算邻域矩阵

来自分类Dev

如何找到向量化矩阵numpy的索引

来自分类Dev

在张量内向量化矩阵乘法

来自分类Dev

如何向量化多维矩阵的 Softmax 概率

来自分类Dev

Matlab中的向量化矩阵和向量运算

来自分类Dev

从标签生成向量矩阵以进行多类分类(向量化)

来自分类Dev

gcc不自动向量化矩阵向量乘法

来自分类Dev

寻找向量/矩阵操作的for循环的向量化替代

来自分类Dev

对R中的两个矩阵进行向量化

来自分类Dev

使用Matlab对3D矩阵左右翻转的向量化

来自分类Dev

查找矩阵的第一非零列(向量化版本)

来自分类Dev

matlab:向量化4D矩阵和

来自分类Dev

使用Numpy向量化矩阵中最近邻居的和

来自分类Dev

如何使用numpy向量化矩阵中几行的运算

来自分类Dev

从python中的矩阵对所有组合的向量化角度计算

来自分类Dev

如何向量化掩码矩阵初始化?