标签: vectorization

在 R 中向量化双重求和

在此输入图像描述

如果我有像这样的双重求和,我如何完全矢量化它?(无循环)

一个好的起点是获取向量 i 和 j。例如,如果 n = 2:

i = 0:2
j = c(0,0,1,0,1,2)
Run Code Online (Sandbox Code Playgroud)

那么接下来我们应该如何应对呢?

for-loop r sum vectorization

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

尝试编写 Gerd Isenberg 的 Bit Scan Forward 的矢量化实现作为练习

我正在尝试编写 BSF 的矢量化实现作为练习,但我陷入困境,它不起作用。

算法:

 short bitScanForward(int16_t bb)
 {
     constexpr uint16_t two = static_cast<uint16_t>(2);
     constexpr uint16_t zero = static_cast<uint16_t>(0);
     uint16_t lsb;
     bb &= -bb;
     lsb = (unsigned short)bb
               | (unsigned short)(bb >> short(8));
     return static_cast<short>(((((((unsigned short)(bb >> 
       short(8)) != zero) * two)
    + ((lsb & unsigned short(0xf0f0)) != zero)) * two)
    + ((lsb & unsigned short(0xcccc)) != zero)) * two)
    + ((lsb & unsigned short(0xaaaa)) != zero);
}
Run Code Online (Sandbox Code Playgroud)

参见:Gerd Isenberg BSF

我的矢量代码:

 [[nodiscard]] inline __m128i _mm_cmpneq_epi16(const __m128i& a, const __m128i& …
Run Code Online (Sandbox Code Playgroud)

c++ sse bit-manipulation simd vectorization

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

寻求 Numpy 中计算量大的数学函数的优化

最近在开发一个Python脚本,实现一个特定的数学函数,如下图所示

在此输入图像描述

其中指数化是周期性的并且1 <= j <= n. 功能比较复杂,受到之前一个问题的启发。该代码的主要目的是评估大型数组x(大小为 5000 或更大)的数学函数。以下是该函数在 Python 中的当前实现:

import numpy as np
import sys, os

def compute_y(x, L, v):
    n = len(x)
    y = np.zeros(n)

    for k in range(L+1):
        # Generate the indices for the window around each j, with periodic wrapping
        indices = np.arange(-k, k+1)

        # Compute the weights
        weights_1 = k - np.abs(indices)
        weights_2 = k + 1 - np.abs(indices)
        weights_d = np.ones(2*k+1)

        # For each j, take the …
Run Code Online (Sandbox Code Playgroud)

python optimization performance numpy vectorization

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

Matlab Vectorization:如何避免这种"for"循环?

我有以下矩阵:

X=1 2 3  
Y=4 5 6  

A=1 2 3  
  4 5 6  
  7 8 9  
Run Code Online (Sandbox Code Playgroud)

我想要做

for each (i,j) in A  
  v = A(i,j)*X - Y
  B(i,j) = v * v'
Run Code Online (Sandbox Code Playgroud)

即A的每个元素乘以向量X,然后结果向量从自身中减去Y,最后我们取该向量的内积来得到一个数.
可以不用for循环吗?

matlab vectorization

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

是否有可能使这个矢量化的MATLAB代码更快?

在我的程序中,我需要计算总和:

和.

我计算这个总和与新值2500倍Cz.

参数z可以是矢量.我编写了简单的for循环和矢量化版本代码,如下所示:

K = 200;
n_z = 40000;
C = ones(K,1); % an example, in real life the arey some coefficients (at next call will be new)
k = 0:K-1;
z = linspace(0, 2*pi, n_z); % at next call will be new

tic;
    my_sum_for = zeros(1, K);
    for i=1:n_z
       my_sum_for(i) = C' * tan(k' * z(i));
    end
toc; % Elapsed time is 1.820485 seconds.

tic;
     my_sum = C' * tan(k' * z); …
Run Code Online (Sandbox Code Playgroud)

matlab vectorization

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

matlab数组元素满足条件无循环

我有一个元素数组和另外两个数组
我正在做这样的事情:

a=[1 3 2 45 4 23 16];
b=[3 9 1 27 33 50 5];
m=10;
k=linspace(min(a),max(a),m);
res=zeros(m,1);
for i=1:m
    res(i) = sum((a < k(i)).*(b < k(i)));
end
Run Code Online (Sandbox Code Playgroud)

有没有办法在没有循环的情况下获得相同的结果?

matlab vectorization logical-operators

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

不带循环的三维可变维对象矩阵之和

我在R中有一个三维物体,它包含n个方形矩阵.例如:

myObject[,,1] # returns a square matrix
myObject[,,2] # returns a square matrix of the same size
...
Run Code Online (Sandbox Code Playgroud)

对象内的所有矩阵都具有相同的大小.我想把所有矩阵加在一起,没有循环.如果我知道对象中有多少个矩阵,这很简单.例如:

matrixSum <- myObject[,,1] + myObject[,,2] + myObject[,,3]
Run Code Online (Sandbox Code Playgroud)

问题是,我需要对几千个这样的对象执行此操作,并且每个对象中都有可变数量的矩阵.有没有办法可以在没有循环的情况下做到这一点?从某种意义上说,我想尝试"矢量化"这个总和.

arrays performance r matrix vectorization

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

将Matalab 60000x10阵列转换为60000x1或1x60000

对于大小为60000行,10列的2D数组,我有如下阵列

 [0 0 0 0 0 1 0 0 0 0]
 [1 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 1]
.......
Run Code Online (Sandbox Code Playgroud)

任何行只包含一个'1'

我必须将它减少到一个行或列向量,它显示我们有一个1的索引.例如,对于上面显示的行,我们必须最终得到

[6,1,10...] 超过第60,000个值.

如何在没有循环的Matlab中做到这一点?

arrays matlab vectorization reduction

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

python中的高效张量收缩

我有一个L张量(ndarray对象)列表,每个都有几个索引.我需要根据连接图收缩这些指数.

连接被编码在元组列表中,((m,i),(n,j))表示" 将张量的第i个索引与张量L[m]的第j个索引收缩" L[n].

如何处理非平凡连接图?第一个问题是,只要我收缩一对索引,结果就是一个不属于列表的新张量L.但即使我解决了这个问题(例如,通过为所有张量的所有索引提供唯一标识符),也存在一个问题,即人们可以选择任何顺序来执行收缩,而某些选择会在计算中期产生不必要的巨大影响(即使最终结果很小).建议?

python numpy vectorization numpy-einsum

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

为几个部分创建具有相同值的matlab数组

我想创建长度的数组Ns(Ns+1)和我需要的第一Ns要素是0,下一个Ns元素是1,...,最后NsNs.

我很清楚有很多方法可以做到这一点for-loops,我想避免这个特定的任务.我正在寻找一种方法来使用matlab函数和矢量化的概念来做到这一点.

例如,我有一个类似的数组,我想填充,0, 1, 2, ..., Ns, 0, 1, 2, ..., Ns, 0, 1, 2, ...我完成了

my_array = repmat(0:Ns, 1, Ns+1);
Run Code Online (Sandbox Code Playgroud)

是否有类似的方法来实现我的目的?

我认为我能做的一件事就是创建一个像矩阵一样的矩阵

0 0 0 ... 0
1 1 1 ... 1
... ... ...
Ns Ns .. Ns
Run Code Online (Sandbox Code Playgroud)

然后连接线; 我知道如何创建矩阵,但不知道如何将线连接成数组.

还有其他方法吗?命令的建议也是可以接受的!

谢谢.

matlab vectorization

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