标签: vectorization

Matlab - Vectorize double for循环在单元格数组中查找唯一的单词标记

我有一个包含句子字符串的单元格数组x的单元格数组,我希望在x中找到所有唯一字标记的列表,然后使用它为数组结构创建字段名称y如果该字段名称尚不存在因为你 现在我使用double for循环迭代x中的每个句子字符串,然后迭代每个单独的单词来完成任务,但是当单元格数组包含太多字符串时它可能会非常慢.

for i=1:length(x)
    unique = unique(x{i});
    for j=1:length(unique)
            y.(unique{j}) = {};
    end
end
Run Code Online (Sandbox Code Playgroud)

样本输入:

x = {{'hello', 'world'}, {'foo', 'bar'}, {'eat', 'foo', 'ice', 'cream'}, {'hello', 'dad'}};
y = {};
Run Code Online (Sandbox Code Playgroud)

那么独特应该是这样的

unique = {'hello', 'world', 'foo', 'bar', 'eat', 'ice', 'cream', 'dad'}
Run Code Online (Sandbox Code Playgroud)

和结构数组y应该具有唯一的字段名称作为字段名称.所以应该有y.hello,y.world,y.foo,y.bar,y.eat,y.ice,y.cream和y.dad.只要根据需要输出长y,就不需要唯一的单词令牌列表.有没有办法通过矢量化或其他方式简化这些操作以使程序运行得更快?谢谢.

matlab for-loop vectorization

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

R - 当向量在两个矩阵中时,如何向量化外积和的计算?

R - 当向量在两个矩阵中时,如何矢量化外积和的计算 - XY

示例:

X = cbind(1:3, 2:4)
Y = cbind(0:2, c(0,0,1))
> X
     [,1] [,2]
[1,]    1    2
[2,]    2    3
[3,]    3    4
> Y
     [,1] [,2]
[1,]    0    0
[2,]    1    0
[3,]    2    1

> outer(X[1,],Y[1,]) + outer(X[2,],Y[2,]) + outer(X[3,],Y[3,])
     [,1] [,2]
[1,]    8    3
[2,]   11    4
Run Code Online (Sandbox Code Playgroud)

我想矢量化操作:

outer(X[1,],Y[1,]) + outer(X[2,],Y[2,]) + outer(X[3,],Y[3,])- 可能吗 ?Mayby的一般结构如下:lapply( ,FUN=outer)然后在列表中加入元素的总和?否则我必须循环outer(X[i,],Y[i,]).

r vectorization

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

理解矢量化

我正在尝试使一些代码更有效,并且想知道如何对此进行矢量化:

%==========================================================================
% MinutesInDayTable.m
% 
% Creates a table identifying every minute as an integer from 0 to 2400.

minuteTableInDay=zeros(24*60,1);
k=1;
for i=1:24
    for j=1:60
        minuteTableInDay(k) = ((i-1)*100+(j-1))*100;
        k=k+1;
    end
end
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ end of code ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

optimization matlab vectorization

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

在matlab中有效地创建索引向量

给定三个正整数x,y和z,使得x> y.创建以下向量的最有效方法是什么:

1,2,3,..,x-y,x+1,x+2,x+3,..,2x-y,2x+1,2x+2,2x+3,..,3x-y,3x+1,...,..,zx+1,zx+2,zx+3,..,zx-y
Run Code Online (Sandbox Code Playgroud)

matlab vector vectorization

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

矢量化包含与分类变量对应的装置的矢量的创建

Data包含label变量和数字x变量,然后我计算xlabel(由means对象创建然后我们用作字典)指定的组的平均值,然后我想创建包含重复与label变量对应的平均值的新向量,下面的示例使用for(),I看不出我怎么能把它矢量化,唯一的可能就是使用merge函数,问题是:

  1. 是否merge提供了矢量化的好处(我的原始数据集,有几百万的观察结果)?

  2. 如果没有,那么是否可以矢量化创建y

我目前的代码是:

set.seed(123)

data<-data.frame(label=sample(c("A","B"),10,replace=TRUE),x=rnorm(10))
data
#   label          x
#1      A  1.7150650
#2      B  0.4609162
#3      A -1.2650612
#4      B -0.6868529
#5      B -0.4456620
#6      A  1.2240818
#7      B  0.3598138
#8      B  0.4007715
#9      B  0.1106827
#10     A -0.5558411


means<-aggregate(formula = x~label, data = data, FUN = mean)
means
#  label          x
#1     A 0.27956110
#2     B 0.03327823 …
Run Code Online (Sandbox Code Playgroud)

r vectorization

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

GCC矢量化语用

使用intel编译器,如果用户确认没有使用依赖关系,则仍然可以对循环进行矢量化#pragma ivdep.

我在GCC找到了一个#pragma GCC ivdep,但收到如下错误:

warning: ignoring #pragma GCC ivdep [-Wunknown-pragmas] #pragma GCC ivdep

gcc pragma vectorization icc auto-vectorization

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

MATLAB在数组列中找到第一个元素

在编写某个函数的上下文中,我有以下示例矩阵:

temp =

     1     2     0     0     1     0
     1     0     0     0     0     0
     0     1     0     0     0     1
Run Code Online (Sandbox Code Playgroud)

我想获得一个数组,其中每个元素指示从该列开始的所有非零元素中的元素数.如果列为空,则该元素应对应于下一个非空列.对于矩阵temp,结果将是:

result = [1 3 5 5 5 6]
Run Code Online (Sandbox Code Playgroud)

因为第一个非零元素开始第一列,第三列开始第二列,第五列开始第五列,第六列开始第六列.

如何以矢量化方式对任何通用矩阵(可能包含或不包含空列的矩阵)执行此操作?

arrays matlab vectorization sparse-matrix

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

我可以使用AVX/SSE调配AoS布局而不是SoA吗?

我想加速一个简单的积分器,它根据位置和速度描述一组无质量粒子.我不是SSE/AVX专家,但我觉得有趣的是SIMD扩展可以在这里产生什么.

许多论文建议使用数组结构:

struct {
  static float2 xy[OUGHTA_BE_ENOUGH];
  static float2 vxvy[OUGHTA_BE_ENOUGH];
} Particles;

// in main loop:
Particles.xy[i] += time_delta * Particles.vxvy[i];
Run Code Online (Sandbox Code Playgroud)

但是,对于许多应用来说,相反的方法是有益的:

struct {
  float2 xy;
  float2 vxvy;
} Particle;

// in main loop:
particles[i].xy += time_delta * particles[i].vxvy;
Run Code Online (Sandbox Code Playgroud)

虽然我模糊地理解要搜索什么来矢量化数组结构版本,但我怀疑有没有办法将SIMD与结构数组版本一起使用,因为字段访问或"调配".

是否有任何技术可以使用SIMD进行上述计算,或者我错过了内在函数?

c++ sse simd vectorization avx

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

减去每行的最大值

假设您要从相应的行中减去矩阵的每一行的最大值.你可以使用这样的循环来做到这一点:

# create matrix
mat <- matrix(rnorm(100),ncol=5,nrow=20)

for(i in 1:nrow(mat)){    #for each row
  row.max <- max( mat[i,] ) #take the maximum of the row
  mat[i,] <- mat[i,] - row.max  #subtract it from the row
}
Run Code Online (Sandbox Code Playgroud)

我想到的方式在量化的方式来做到这一点,也许使用max.col(),但是,我不能来的东西为止.有任何想法吗?

谢谢!

编辑:

谢谢你的回答,我接受了(迄今为止)最快的解决方案.

Unit: microseconds
    expr      min        lq       mean    median        uq       max neval
    loop 4671.687 4906.6820 5124.78995 5019.7965 5214.5935 12318.986   100
   apply   41.055   47.0430   60.58208   57.0925   71.6320   158.661   100
 rowMaxs    2.139    2.9945    6.21019    5.3465    8.9810    12.402   100
 do.call  111.618  125.0890  154.46904  142.4095 …
Run Code Online (Sandbox Code Playgroud)

r max matrix vectorization

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

向量化乘法:逐个将Julia中的两个向量相乘

我决定潜入朱莉娅,撞墙。快速。

我正在尝试复制一个简单的操作,该操作在python numpy中如下

a = numpy.array([1,2,3])
b = numpy.array([1,2,3])
a*b
[output]: [1,4,9]
Run Code Online (Sandbox Code Playgroud)

换句话说,“ [1,4,9]”是我期望的输出。

我在Julia中尝试了以下方法:

a = [1,2,3]
b = [1,2,3]
a*b
[output]: MethodError: no method matching *(::Array{Int64,1}, ::Array{Int64,1})
Run Code Online (Sandbox Code Playgroud)

或尝试明智之后:

a = [1,2,3]
b = [1,2,3]'
a*b
[output]: 3×3 Array{Int64,2}:
 1  2  3
 2  4  6
 3  6  9
Run Code Online (Sandbox Code Playgroud)

我知道这似乎是一个基本问题,但我的Google搜寻似乎不是我今天最好的,和/或stackoverflow可以使用此问题和答案;)

感谢您的帮助和指点!

最好

arrays vectorization julia vector-multiplication

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