标签: vectorization

想要摆脱循环的建议

我编写了一个程序,可以解决3n + 1问题(又名"奇妙的数字"和其他各种事情).但它有一个双循环.我怎么能把它矢量化呢?

代码是

count <- vector("numeric", 100000)
L <- length(count)

for (i in 1:L)
{
x <- i
   while (x > 1)
   {
   if (round(x/2) == x/2) 
     {
     x <- x/2
     count[i] <- count[i] + 1 
     } else
     {
     x <- 3*x + 1
     count[i] <- count[i] + 1
     }
   }
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

loops r vectorization

2
推荐指数
1
解决办法
583
查看次数

在数组上应用函数,以向量化方式返回不同大小的输出

如何应用一个函数,使用arrayfun?返回非标量输出到数组?

例如 - 如何向量化以下代码?

array = magic(5);
A = cell(size(array));
for i=1:5
    for j=1:5
      A{i,j} = 1:array(i,j);
    end
end
Run Code Online (Sandbox Code Playgroud)

这种天真的向量化尝试不起作用,因为输出不是标量

array = magic(5);
result = arrayfun(@(x)(1:x),array);
Run Code Online (Sandbox Code Playgroud)

matlab vectorization

2
推荐指数
1
解决办法
1063
查看次数

OpenMP与矢量化的比较

给定一个示例函数(示例如下所示),for循环可以使用OpenMP进行并行化,也可以使用向量化进行向量化(假设编译器执行向量化).

void function(float* a, float* b, float* c, int n)
{
      for(int i = 0; i < n; i++)
      {
          c[i] = a[i] * b[i];
      }
}
Run Code Online (Sandbox Code Playgroud)

我想知道

  1. OpenMP和Vectorization之间的性能是否会有任何差异
  2. 使用一个优于另一个是否有任何优势.
  3. 是否有可能同时使用OpenMP和矢量化.

注意:我没有给出关于不同的SSE版本,处理器/核心数量(在OpenMP中扩展的线程数量)等等...我的问题一般.答案也可以更具体.

vectorization openmp

2
推荐指数
2
解决办法
886
查看次数

如何在Matlab中避免嵌套for循环?

如果我有 :

for i=1:n
    for j=1:m
        if outputImg(i,j) < thresholdLow
            outputImg(i,j) = 0;
        elseif outputImg(i,j)> thresholdHigh
            outputImg(i,j) = 1;
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

甚至更糟:

for i=1:n
    for j=1:m
        for k=1:q
                % do something  
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

我如何不同实现这一点,没有for

matlab loops for-loop vectorization

2
推荐指数
1
解决办法
1336
查看次数

矢量化循环

我想优化下面的代码,这只是一个矩阵乘法 - 我确信这可以在不使用循环的情况下完成 - 但我似乎无法将其弄好.

k = [ 76    150    29; ...
     -44   -85    128;  ...
     128   -108   -21];

for i = 1:size(rgb,1)
  for j = 1:size(rgb,2)
    triplet(1:3) = rgb(i,j,:);
    yuv(i,j,:)   = single(triplet) * single(k');
    yuv(i,j,:)   = fix(yuv(i,j,:) ./ 256);
  end
end
Run Code Online (Sandbox Code Playgroud)

有什么想法或建议吗?

对于那些具有图像处理背景的人来说,你会发现上面的代码只是一个RGB到YUV的转换 - 你可能会问我为什么不使用内置rgb2ycbcr函数 - 但是在这种情况下我想使用如上所述的8位转换系数.

matlab image-processing vectorization

2
推荐指数
1
解决办法
82
查看次数

通过MATLAB进行多向量化?

我不确定我是否正确地命名了这个问题:

是)我有的:

X = [0 1 2 3 4 5 6 7 8 9; 6 2 5 5 4 5 6 3 7 6];
Z = [0 0 0 1 0 0 0 0 0 0; 0 0 0 0 0 1 0 0 0 0; 0 0 0 0 0 0 0 0 0 1; 0 0 0 0 0 0 0 0 1 0];
Run Code Online (Sandbox Code Playgroud)

现在我的问题是:

我们将矩阵X的第二整行与矩阵Z进行比较(两者都具有相同数量的库仑但行数可能不同)我想要得到的结果如下:

ans = [5 5 6 7]
Run Code Online (Sandbox Code Playgroud)

怎么一回事,因为:

X(2,Z(1,:)) = 5
X(2,Z(2,:)) = …
Run Code Online (Sandbox Code Playgroud)

matlab vectorization

2
推荐指数
1
解决办法
48
查看次数

在Python中向量化重复数学函数

我有这种形式的数学函数,$f(x)=\sum_{j=0}^N x^j * \sin(j*x)$希望在中高效地进行计算Python。N约为100。对于巨大矩阵的所有条目x,该函数f评估了数千次,因此我想提高性能(分析器表明f的计算大部分时间都花在了计算上)。为了避免在函数f的定义中出现循环,我写了:

def f(x)
    J=np.arange(0,N+1)
    return sum(x**J*np.sin(j*x))
Run Code Online (Sandbox Code Playgroud)

问题是,如果要对矩阵的所有条目求值该函数,则需要先使用numpy.vectorize,但据我所知,这不一定比for循环快。

有没有一种有效的方法来执行这种类型的计算?

python numpy vectorization mathematical-expressions

2
推荐指数
1
解决办法
279
查看次数

R:如何为`rnorm`的`mean`参数提供一个向量?

如何为means参数提供向量rnorm

around_int1_mean <- seq(1.5, 3.5, 0.1)
Run Code Online (Sandbox Code Playgroud)

我想做一些类似的事情rnorm(n=25, mean=around_int1_mean, sd=0.2),避免使用for-loop.

我想得到一length(around_int1_mean)组样本,n=25其中平均值(在第一组中)为1.5,然后是1.6,依此类推,直到最后一组的平均值为3.5.所以最后我会得到21套25码样本.

r vectorization

2
推荐指数
1
解决办法
155
查看次数

如何重复向量的每个第3个元素?

我有这样的矢量:

h = [1,2,3,4,5,6,7,8,9,10,11,12]
Run Code Online (Sandbox Code Playgroud)

我想重复每一个第三个元素:

h_rep = [1,2,3,3,4,5,6,6,7,8,9,9,10,11,12,12]
Run Code Online (Sandbox Code Playgroud)

如何在MATLAB中优雅地完成这项工作?实际的数组是巨大的,所以理想情况下我不想写一个for循环.有没有矢量化的方法来做到这一点?

arrays matlab vectorization

2
推荐指数
2
解决办法
173
查看次数

用"曲线"绘制函数:一个棘手的表达方式?

我的问题涉及一些应该相当简单的问题,但我无法使其发挥作用.我的意思是,你可以计算xy,然后随着剧情它们plot的功能.但这可以使用该curve功能完成吗?

我想绘制以下R函数f2:

n <- 1
m <- 2
f2 <- function(x) min(x^n, x^(-m))
Run Code Online (Sandbox Code Playgroud)

但是这段代码失败了:

curve(f2, 0, 10)
Run Code Online (Sandbox Code Playgroud)

有什么建议?

plot curve r vectorization

2
推荐指数
1
解决办法
227
查看次数