vectorization

    8热度

    3回答

    标准R表达式outer(X, Y, f)评估为其第(i,j)项具有值f(X[i], Y[j])的矩阵。 我想实现该功能multi.outer,的outer n维概括:multi.outer(f, X_1, ..., X_n),其中f是一些n元功能,将产生一个(长度(X_1)* ... *长度(X_n))对于所有有效的索引集合(i_1,...,i_n) - 第i个条目具有值f(X_1[i_1], .

    1热度

    1回答

    是否有Vectorize版本使用apply而不是mapply? 我想矢量化一个函数,该函数以一种允许我将数组传递给该函数并返回矢量的方式接受矢量输入。 当然,我可以写我自己的包装,这工作得很好。但我想知道这个功能是否内置? 我也可以使用Vectorize,但后来我必须将矩阵输入转换为data.frame才能工作。例如: LAMBDA <- cbind(c(1, .5, .5), c(.5, 1,

    5热度

    4回答

    我想在矩阵中的所有行所有成对比较,显然加倍循环工作,但对于大数据集极其昂贵。 我抬头隐含的循环一样apply()等,但没有一个线索如何避免内循环。 如何实现?

    6热度

    1回答

    我正在尝试用SIMD内在函数编写流压缩(取一个数组并删除空元素)。循环的每次迭代一次处理8个元素(SIMD宽度)。 对于SSE内在函数,我可以使用_mm_shuffle_epi8()进行相当有效的操作,该函数执行16个条目表查找(收集并行计算术语)。 shuffle索引是预计算的,并用一个掩码查找。 for (i = 0; i < n; i += 8) { v8n_Data = _mm

    -2热度

    2回答

    问候全部 我该如何矢量化这个for循环? t_rebuilt=linspace(0,1,length(inner_freq)); for ii=1:1:length(inner_freq)-1;ii=ii+1; aa_sig_rebuilt=inner_freq(ii,2)*cos(2*pi*t_rebuilt*inner_freq(ii,1)+inner_freq(ii,3));

    1热度

    2回答

    我需要在Matlab中使用一组滤波器来过滤图像。我的第一个尝试是使用一个简单的for循环来反复调用银行中每个过滤器的“imfilter”函数。 我需要重复这个过程多次为我的应用程序,所以我需要这一步尽可能高效。因此,我想知道是否有任何方法可以将此操作矢量化以加快此过程。为了简化事情,我的所有过滤器内核大小相同(9x9)。 作为我要做的一个例子,我的过滤器设置在一个9x9x32的元素块中,需要将其应

    3热度

    4回答

    下面是我用它来找到一个数据帧数值变量的代码: Data <- iris numericvars <- NULL for (Var in names(Data)) { if(class(Data[,Var]) == 'integer' | class(Data[,Var]) == 'numeric') { numericvars <- c(numericvars,Var)

    4热度

    2回答

    我想计算沿给定轴方向的翻译图像的最大值。我知道ordfilt2,但我想避免使用图像处理工具箱。 因此,这里是我到目前为止的代码: imInput = imread('tire.tif'); n = 10; imMax = imInput(:, n:end); for i = 1:(n-1) imMax = max(imMax, imInput(:, i:end-(n-i)));

    4热度

    1回答

    我正在查看AVX programming reference。 new Haswell instructions包括一些热切期待的“聚集”负载。但是,我无法弄清楚索引数据项上的对齐限制。参考文献的第2.5节“内存对齐”似乎应该列出表2.4或2.5之一中的各种VGATHER*指令......但它没有。背景:虽然收集指令支持的数据大小为4和8个字节,但我的应用程序可以通过将相邻的16位数据值集合加载到

    3热度

    1回答

    我正在使用intel-cc编译一些C++代码并使用-Wall选项,它似乎是向量化了很多循环。我正在假设这对现在的表现有好处。 现在我的问题是这样的;相反,如果for循环我已经展开,所以我们有例如 a[0] = b[0] + 1; a[1] = b[1] + 1; a[2] = b[2] + 1; ,而不是 for(int i=0;i<3;++i) a[i] = b[i] + 1; 可以