我是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.test在2x4矩阵上执行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 = …
我给了两个非常大的数据集,我一直在尝试构建一个函数,该函数可以从一个集合中找到某个坐标,该坐标尊重关于其他数据集的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) 我有一个包含矩阵的单元格数组.我想获得单元格数组中每个元素长度的一维行向量.例:
a = {[1, 2], [1, 8], [5, 2, 4]};
% b = ...?
b == [ 2, 2, 3 ]
Run Code Online (Sandbox Code Playgroud)
这可能不使用for循环吗?
有没有一种通用的方法来在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) 我不明白如何在不使用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)仅使用向量运算和逻辑索引重新实现代码(即,您不能使用任何循环或分支).
我有一个很长的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解决方案.
我在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)不是递归的.
我怎么解决这个问题?
问题:
我在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我的理解,这个团伙可能在这里帮不了多少).或者像这样的循环真的是我能做的最好的?
我需要按照下面的模式加载并重新排列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)指令实现此目的的有效方法?
这需要重复执行,因此允许预先存储的掩码或常量.
根据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 ×10
matlab ×3
r ×3
arrays ×2
loops ×2
numpy ×2
python ×2
avx2 ×1
conditional ×1
dataframe ×1
if-statement ×1
indexing ×1
julia ×1
octave ×1
optimization ×1
recursion ×1
simd ×1
sse2 ×1
vector ×1
x86 ×1