标签: vectorization

R:拆分数据帧,将函数应用于每个子集中的所有行对

我是R的新手,我正在努力完成以下任务efficiently.

我有一个data.frame,x与列:start,end,val1,val2,val3,val4.列按照排序/排序start.

对于每一个start,首先我必须找到x该共享中的所有条目相同start.由于列表是有序的,因此它们将是连续的.如果特定start只出现一次,那么我忽略它.然后,对于具有相同条目的这些条目,start假设有一个特定start条目,则有3个条目,如下所示:

条目 start=10

start end val1 val2 val3 val4
   10  25    8    9    0    0
   10  55   15  200    4    9
   10  30    4    8    0    1

然后,我必须一次取2行并fisher.test2x4矩阵上执行val1:4.那是,

row1:row2 => fisher.test(matrix(c(8,15,9,200,0,4,0,9), nrow=2))
row1:row3 => fisher.test(matrix(c(8,4,9,8,0,0,0,1), nrow=2))
row2:row3 = …

r vectorization dataframe

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

向量化包含循环和if子句的搜索函数

我给了两个非常大的数据集,我一直在尝试构建一个函数,该函数可以从一个集合中找到某个坐标,该坐标尊重关于其他数据集的if子句.我的问题是我写的函数非常慢,虽然我一直在以某种方式阅读类似问题的答案,但我还是没有成功.
所以如果给我:

>head(CTSS)    
    V1     V2     V3
1 chr1 564563 564598 
2 chr1 564620 564649
3 chr1 565369 565404
4 chr1 565463 565541
5 chr1 565653 565697
6 chr1 565861 565922
Run Code Online (Sandbox Code Playgroud)

> head(href)
   chr      region    start      end strand nu   gene_id transcript_id
1 chr1 start_codon 67000042 67000044      +  . NM_032291     NM_032291
2 chr1         CDS 67000042 67000051      +  0 NM_032291     NM_032291
3 chr1        exon 66999825 67000051      +  . NM_032291     NM_032291
4 chr1         CDS 67091530 67091593      +  2 NM_032291     NM_032291
5 …
Run Code Online (Sandbox Code Playgroud)

optimization loops if-statement r vectorization

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

矢量长度的单元格数组中的所有元素?

我有一个包含矩阵的单元格数组.我想获得单元格数组中每个元素长度的一维行向量.例:

a = {[1, 2], [1, 8], [5, 2, 4]};
% b = ...?
b == [ 2, 2, 3 ]
Run Code Online (Sandbox Code Playgroud)

这可能不使用for循环吗?

matlab vectorization octave

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

NumPy中的矢量化操作

有没有一种通用的方法来在NumPy中对这些操作进行矢量化?

In [2]: N = 8

In [3]: ll = np.arange(8)

In [4]: arr = np.zeros(ll.shape + (2, 2))

In [5]: ll.shape
Out[5]: (8,)

In [6]: arr.shape
Out[6]: (8, 2, 2)

In [7]: for ii in range(N):
   ...:     arr[ii, :, :] = np.array(...)  # 2 x 2 array function of ll[ii]
Run Code Online (Sandbox Code Playgroud)

如果该函数是对ll的线性运算那么这将是微不足道的,但是在一般情况下有没有办法做到这一点?举个例子:

In [8]: for ii in range(N):
   ...:     arr[ii, :, :] = np.array([
   ...:         [np.cos(ll[ii]) - 1, 0],
   ...:         [np.sin(ll[ii]), np.cos(ll[ii]) ** 2]
   ...:     ])
Run Code Online (Sandbox Code Playgroud)

python numpy vectorization

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

Matlab:使用逻辑索引删除IF-ELSE条件语句

我不明白如何在不使用if语句或循环的情况下完成这个问题.

n = input ('What is the vector length? ');
y = rand(n,1);
x = rand(n,1);
p = zeros(n,1);
for i=1:n
    if (y(i) > 0.5 && x(i) < 0.5) || y(i) < 0.2
        p(i) = y(i) + x(i);
    else
        p(i) = (y(i)*x(i))^2
    end
end
Run Code Online (Sandbox Code Playgroud)

a)仅使用向量运算和逻辑索引重新实现代码(即,您不能使用任何循环或分支).

arrays indexing matlab conditional vectorization

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

矢量化np.arange或等效

我有一个很长的1D阵列.我想创建一个数组,它是np.arange()应用于数组中每个值加上一些常量的结果.例如,如果常量= 3,我的数组看起来像

[1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)

我想得到

[[1,2,3]
 [2,3,4]
 [3,4,5]
 [4,5,6]
 [5,6,7]]
Run Code Online (Sandbox Code Playgroud)

np.arange()只接受标量作为参数.我玩np.vectorize()了一下但没有成功.很明显,我可以通过循环,或使用列表,然后转换为数组,但我想知道是否有一个很好的numpy-only解决方案.

python arrays numpy vectorization

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

矢量化这个循环

我在MATLAB中有以下循环:

n = 20000
rho=0.9;
sigma=[0.1 0.2 0.3];
epsilon = normrnd(0,1, 3, n);
z =  NaN(1,n);
z(1,1) = 0;
for i=2:n
   z(1,i) = rho * z(1,i-1) + sigma* epsilon(:,i);
end
Run Code Online (Sandbox Code Playgroud)

我尝试通过以下方式进行矢量化:

z(1,2:end) = rho * z(1,1:end-1) + sigma * epsilon
Run Code Online (Sandbox Code Playgroud)

它没用.我明白问题是这一点:z(1,2:end) = rho * z(1,1:end-1)不是递归的.

我怎么解决这个问题?

recursion matlab vectorization

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

优化/矢量化R中的循环,从输入向量中的范围生成random?

问题:

我在R中使用一个循环从两个("父")向量创建一个新向量,为新向量中的每个位置生成一个随机值,该值位于父对象在此位置的值范围内(它是为遗传算法中的交叉阶段).请注意,我不想要x和y的平均值,而是要求各个位置上的值范围内的随机值.

示例代码:

x = c(0.1, 0.7, 1, 0.8)
y = c(0, 0.9, 0.2, 1)
child = rep(NA, length(x))
for(i in 1:length(x)){
  child[i] = sample(seq(min(x[i], y[i]),  
                        max(x[i],y[i]), by=0.01), 1)
}
# This might yield, for example: 0.02 0.83 0.73 0.88 
Run Code Online (Sandbox Code Playgroud)

题:

它工作正常,但我想也许有一种更有效的方法来做到这一点(因为我需要在数千次迭代中的每一次为100-1000个人做这件事).在R,有喜欢漂亮的快捷功能ifelse,colMeans,max.col,match,rollmean,等,在载体的工作,所以我想知道,是否有类似的东西,我的目的呢?(根据apply我的理解,这个团伙可能在这里帮不了多少).或者像这样的循环真的是我能做的最好的?

loops r vector vectorization genetic-algorithm

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

使用向量指令进行复杂的数据重组

我需要按照下面的模式加载并重新排列12个字节到16(或24到32):

ABC DEF GHI JKL
Run Code Online (Sandbox Code Playgroud)

ABBC DEEF GHHI JKKL
Run Code Online (Sandbox Code Playgroud)

您能否建议使用SSE(2)和/或AVX(2)指令实现此目的的有效方法?

这需要重复执行,因此允许预先存储的掩码或常量.

x86 simd vectorization sse2 avx2

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

如何在Julia函数调用中使用点语法

根据Julia文档,我应该能够使用数组中的每个元素调用给定(甚至非向量化)函数fun.(A),其中A是数组.我尝试一个简单的例子,它似乎不起作用:

julia> x = collect(linspace(0,pi,100));
julia> y = sin.(x)
ERROR: TypeError: getfield: expected Symbol, got Array{Float64,1}
Run Code Online (Sandbox Code Playgroud)

我自己的所有功能都会出现同样的错误.如何正确使用此功能?

vectorization julia

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