标签: vectorization

用更优雅的方式用"if/else"写一个for/while循环?

我写了这段代码:

A是一个nXm矩阵

[nA, mA] = size(A);

currentVector(nA,mA) = 0;
for i = 1: nA
    for j = 1 : mA
        if A (i,j) ~= 0
            currentVector(i,j) = ceil(log10( abs(A(i,j)) ));
        else
            currentVector(i,j) = 0;
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

如何以更"matlab"的方式编写上述代码?

是否有if/else和for循环的快捷方式?例如C:

int a = 0;
int b = 10;
a = b > 100 ? b : a;
Run Code Online (Sandbox Code Playgroud)

那些if/else条件不断提醒我CJava.

谢谢

matlab for-loop if-statement vectorization

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

没有for循环的n个函数结果的数组

我有一个fun返回double 的函数.我想调用函数n次数并将结果存储在数组中:

results = zeros(1, n);
for i = 1:n 
    results(i) = fun;
end
Run Code Online (Sandbox Code Playgroud)

没有循环,我可以实现这一目标吗?

n在高达10,000,000的范围内,运行时间fun几乎可以忽略不计.


我试过了arrayfun,但它实际上要慢很多(大约慢了87倍):

results = arrayfun(@(~) fun, 1:n);
Run Code Online (Sandbox Code Playgroud)

可能循环已经是最快的解决方案吗?如果可以用一个衬垫完成,我仍然会感兴趣.

matlab loops vectorization

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

Matlab - 向量化方式到单元格数组等于字符串中的索引

我有一个435x1单元阵列,其元素是'y','n'或'?'.我想找到哪些指数等于'y'.

对于普通数组,我只使用find函数.但是我不能将它用于单元格数组,因为没有为类型单元格定义eq.

我想我可以通过每个元素来做

for index=1:size(cell_array,1)
    if cell_array{index} == 'y'
        %add index to some array of indices
    end
end
Run Code Online (Sandbox Code Playgroud)

但是有一种矢量化的方式来遍历数组并找到索引包含等于'y'的元素吗?任何帮助表示赞赏.

arrays matlab vectorization cell-array

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

在__m128i向量上水平检查零?

我有几个__m128i包含32位无符号整数的向量,我想检查4个整数中的任何一个是否为零.

我理解如何"聚合"多个__m128i向量,但最终我仍然会得到一个__m128i向量,然后我需要水平检查.

如何在最后一个矢量上执行零的最终水平检查?

编辑我使用英特尔内在函数,而不是内联汇编

c++ sse intel vectorization avx

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

如何在MATLAB中更快地制作矢量和矩阵的点积?

我的代码工作但是它相当慢,我需要多次运行它,因此效率非常低.我很肯定有一种更有效的计算方法.

代码是这个等式的实现: MMD

其中k(x,y)是两个矢量xi和yj的点积,分别是两个矩阵A和B的行i,j.

我还要注意每个矩阵中的行数是数千.

这是我的代码

m=size(A,1);
Kxx=0;
for i=1:m
    x=A(i,:);
    X=A(i+1:end,:);
    Kxx=Kxx+2*sum(dot(ones(m-i,1)*x,X,2));
end
Kxx=Kxx/(m*(m-1));

n=size(B,1);
Kyy=0;
for j=1:n
   y=B(j,:);
   YY=B(j+1:end,:);
   Kyy=Kyy+2*sum(dot(ones(n-j,1)*y,YY,2));
end
Kyy=Kyy/(n*(n-1));

Kxy=0;
for i=1:m
    x=A(i,:);
   for j=1:n
       y=B(j,:);
       Kxy=Kxy+dot(x,y);
   end
end
Kxy=Kxy*2/(m*n);

Dxy=Kxx+Kyy-Kxy;
Run Code Online (Sandbox Code Playgroud)

matlab matrix vectorization

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

使用多个范围在R中创建向量

如何使用矢量范围在R中创建矢量.例如,假设我有两个指定范围限制的向量.说,

V1=c(1,10,20)

V2=c(3,12,21)
Run Code Online (Sandbox Code Playgroud)

我想做一些看似直观的事情:

c(V1:V2)

[1] 1 2 3 10 11 12 20 21
Run Code Online (Sandbox Code Playgroud)

{这意味着是c(1:3,10:12,20:21)的向量化等价物}

r range vectorization

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

有没有办法在MATLAB中对这个循环进行矢量化?

我希望对此循环进行矢量化.此循环用于获取图像像素的坐标并按行顺序形成数组.

rows = 812; % 812x650 image
cols = 650;
n=rows*cols; % total number of pixels

index = zeros(n,2); % n coordinates of image pixels
pt_homo = zeros(3,1,n); % [x,y,1]'

k=1;
for r=1:rows
    for c=1:cols
        index(k,1)=c;
        index(k,2)=r;
        pt_homo(1,1,k) = c;
        pt_homo(2,1,k) = r;
        pt_homo(3,1,k) = 1;
        k=k+1;
    end
end
Run Code Online (Sandbox Code Playgroud)

matlab vectorization

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

python中math.atan2()函数的矢量化示例

让我们说我有一个A大小的numpy矩阵Nx2.我正在做的是计算第一列和第二列的四象限反正切,如下所示:

import math
for i in xrange(A.shape[0]):
  phase[i] = math.atan2(A[i,0], A[i,1])
Run Code Online (Sandbox Code Playgroud)

但是,我想以矢量化的方式做到这一点.我怎样才能做到这一点?math.atan2()函数似乎不支持向量化.

谢谢!

python math trigonometry numpy vectorization

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

向量列表的增量均值

我有一个向量,我想采用向量的增量平均值.

a <- 2 4 6 2 4 0 1 0 0 1
Run Code Online (Sandbox Code Playgroud)

这有效:

for(i in seq_along(a)) {
    print(mean(a[1:seq_along(a)[[i]]]))
    }
[1] 2
[1] 3
[1] 4
[1] 3.5
[1] 3.6
[1] 3
[1] 2.714286
[1] 2.375
[1] 2.111111
[1] 2
Run Code Online (Sandbox Code Playgroud)

但现在我想把它扩展到一个向量列表,我被卡住了.

b <- list(x = rnorm(10, mean = 5), x2 = rnorm(10, mean = 20))
b
$x
 [1] 4.893252 5.129610 4.599701 5.409024 4.666844 5.787243 5.697621 2.968771 5.216302 6.268629

$x2
 [1] 19.50947 22.14797 20.80683 19.47857 21.24126 18.36233 20.57424 19.68233 20.67508 19.83930 …
Run Code Online (Sandbox Code Playgroud)

r vectorization

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

log的向量化计算(n!)

我有一个(任意形状的)X整数数组,并且我想计算每个条目的阶乘的对数(精确地,不是通过Gamma函数)。数字足够大

np.log(scipy.special.factorial(X))
Run Code Online (Sandbox Code Playgroud)

是不可行的。所以我想做类似的事情np.sum(np.log(np.arange(2,X+1)), axis=-1)

但是arange()函数为每个条目赋予不同的大小,因此这是行不通的。我虽然想用填充,但是我不确定该怎么做。

能以向量化的方式完成吗?

python numpy vectorization multidimensional-array

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