我编写了一个程序,可以解决3n + 1问题(又名"奇妙的数字"和其他各种事情).但它有一个双循环.我怎么能把它矢量化呢?
代码是
count <- vector("numeric", 100000)
L <- length(count)
for (i in 1:L)
{
x <- i
while (x > 1)
{
if (round(x/2) == x/2)
{
x <- x/2
count[i] <- count[i] + 1
} else
{
x <- 3*x + 1
count[i] <- count[i] + 1
}
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
如何应用一个函数,使用arrayfun?返回非标量输出到数组?
例如 - 如何向量化以下代码?
array = magic(5);
A = cell(size(array));
for i=1:5
for j=1:5
A{i,j} = 1:array(i,j);
end
end
Run Code Online (Sandbox Code Playgroud)
这种天真的向量化尝试不起作用,因为输出不是标量
array = magic(5);
result = arrayfun(@(x)(1:x),array);
Run Code Online (Sandbox Code Playgroud) 给定一个示例函数(示例如下所示),for循环可以使用OpenMP进行并行化,也可以使用向量化进行向量化(假设编译器执行向量化).
例
void function(float* a, float* b, float* c, int n)
{
for(int i = 0; i < n; i++)
{
c[i] = a[i] * b[i];
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道
注意:我没有给出关于不同的SSE版本,处理器/核心数量(在OpenMP中扩展的线程数量)等等...我的问题一般.答案也可以更具体.
如果我有 :
for i=1:n
for j=1:m
if outputImg(i,j) < thresholdLow
outputImg(i,j) = 0;
elseif outputImg(i,j)> thresholdHigh
outputImg(i,j) = 1;
end
end
end
Run Code Online (Sandbox Code Playgroud)
甚至更糟:
for i=1:n
for j=1:m
for k=1:q
% do something
end
end
end
Run Code Online (Sandbox Code Playgroud)
我如何不同实现这一点,没有for?
我想优化下面的代码,这只是一个矩阵乘法 - 我确信这可以在不使用循环的情况下完成 - 但我似乎无法将其弄好.
k = [ 76 150 29; ...
-44 -85 128; ...
128 -108 -21];
for i = 1:size(rgb,1)
for j = 1:size(rgb,2)
triplet(1:3) = rgb(i,j,:);
yuv(i,j,:) = single(triplet) * single(k');
yuv(i,j,:) = fix(yuv(i,j,:) ./ 256);
end
end
Run Code Online (Sandbox Code Playgroud)
有什么想法或建议吗?
对于那些具有图像处理背景的人来说,你会发现上面的代码只是一个RGB到YUV的转换 - 你可能会问我为什么不使用内置rgb2ycbcr函数 - 但是在这种情况下我想使用如上所述的8位转换系数.
我不确定我是否正确地命名了这个问题:
是)我有的:
X = [0 1 2 3 4 5 6 7 8 9; 6 2 5 5 4 5 6 3 7 6];
Z = [0 0 0 1 0 0 0 0 0 0; 0 0 0 0 0 1 0 0 0 0; 0 0 0 0 0 0 0 0 0 1; 0 0 0 0 0 0 0 0 1 0];
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:
我们将矩阵X的第二整行与矩阵Z进行比较(两者都具有相同数量的库仑但行数可能不同)我想要得到的结果如下:
ans = [5 5 6 7]
Run Code Online (Sandbox Code Playgroud)
怎么一回事,因为:
X(2,Z(1,:)) = 5
X(2,Z(2,:)) = …Run Code Online (Sandbox Code Playgroud) 我有这种形式的数学函数,$f(x)=\sum_{j=0}^N x^j * \sin(j*x)$希望在中高效地进行计算Python。N约为100。对于巨大矩阵的所有条目x,该函数f评估了数千次,因此我想提高性能(分析器表明f的计算大部分时间都花在了计算上)。为了避免在函数f的定义中出现循环,我写了:
def f(x)
J=np.arange(0,N+1)
return sum(x**J*np.sin(j*x))
Run Code Online (Sandbox Code Playgroud)
问题是,如果要对矩阵的所有条目求值该函数,则需要先使用numpy.vectorize,但据我所知,这不一定比for循环快。
有没有一种有效的方法来执行这种类型的计算?
如何为means参数提供向量rnorm?
around_int1_mean <- seq(1.5, 3.5, 0.1)
Run Code Online (Sandbox Code Playgroud)
我想做一些类似的事情rnorm(n=25, mean=around_int1_mean, sd=0.2),避免使用for-loop.
我想得到一length(around_int1_mean)组样本,n=25其中平均值(在第一组中)为1.5,然后是1.6,依此类推,直到最后一组的平均值为3.5.所以最后我会得到21套25码样本.
我有这样的矢量:
h = [1,2,3,4,5,6,7,8,9,10,11,12]
Run Code Online (Sandbox Code Playgroud)
我想重复每一个第三个元素:
h_rep = [1,2,3,3,4,5,6,6,7,8,9,9,10,11,12,12]
Run Code Online (Sandbox Code Playgroud)
如何在MATLAB中优雅地完成这项工作?实际的数组是巨大的,所以理想情况下我不想写一个for循环.有没有矢量化的方法来做到这一点?
我的问题涉及一些应该相当简单的问题,但我无法使其发挥作用.我的意思是,你可以计算x和y,然后随着剧情它们plot的功能.但这可以使用该curve功能完成吗?
我想绘制以下R函数f2:
n <- 1
m <- 2
f2 <- function(x) min(x^n, x^(-m))
Run Code Online (Sandbox Code Playgroud)
但是这段代码失败了:
curve(f2, 0, 10)
Run Code Online (Sandbox Code Playgroud)
有什么建议?