我写了这段代码:
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条件不断提醒我C和Java.
谢谢
我有一个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)
可能循环已经是最快的解决方案吗?如果可以用一个衬垫完成,我仍然会感兴趣.
我有一个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'的元素吗?任何帮助表示赞赏.
我有几个__m128i包含32位无符号整数的向量,我想检查4个整数中的任何一个是否为零.
我理解如何"聚合"多个__m128i向量,但最终我仍然会得到一个__m128i向量,然后我需要水平检查.
如何在最后一个矢量上执行零的最终水平检查?
编辑我使用英特尔内在函数,而不是内联汇编
我的代码工作但是它相当慢,我需要多次运行它,因此效率非常低.我很肯定有一种更有效的计算方法.
其中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) 如何使用矢量范围在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)的向量化等价物}
我希望对此循环进行矢量化.此循环用于获取图像像素的坐标并按行顺序形成数组.
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) 让我们说我有一个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()函数似乎不支持向量化.
谢谢!
我有一个向量,我想采用向量的增量平均值.
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) 我有一个(任意形状的)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()函数为每个条目赋予不同的大小,因此这是行不通的。我虽然想用填充,但是我不确定该怎么做。
能以向量化的方式完成吗?
vectorization ×10
matlab ×5
numpy ×2
python ×2
r ×2
arrays ×1
avx ×1
c++ ×1
cell-array ×1
for-loop ×1
if-statement ×1
intel ×1
loops ×1
math ×1
matrix ×1
range ×1
sse ×1
trigonometry ×1