我有一个像下面这样的矩阵(任意cols/rows):
1 0 0 0 0
1 2 0 0 0
1 2 3 0 0
1 2 3 4 0
1 2 3 4 5
1 2 5 0 0
1 2 5 3 0
1 2 5 3 4
1 4 0 0 0
1 4 2 0 0
1 4 2 3 0
1 4 2 5 0
1 4 2 5 3
1 4 5 0 0
1 4 5 3 0
2 0 0 0 …Run Code Online (Sandbox Code Playgroud) 如果我有一个for带有嵌套for循环的循环,使用一个循环将值输入到方形矩阵中for,循环通过我的Y轴,另一个循环通过我的X轴
我怎样才能将其改为矢量化以提高效率
g=zeros(f);
%y loop
for u = 1:f
%x loop
for v = 1:f
g(u,v) = exp(-(((u-u0)^2)+((v-u0)^2))/(2*(sigma^2)))
end
end
Run Code Online (Sandbox Code Playgroud) 有没有办法通过这种操作来提高性能?
t=0:0.01:100;
f=@(t,l) exp(-t.*l)
l=[0.1:0.5:100];
for ll=1:length(l)
a(ll,:)=f(t,l(ll));
end
Run Code Online (Sandbox Code Playgroud)
在这些情况下,我想不出任何避免循环的方法.
任何帮助表示赞赏.
输出是一个3d矩阵,size(output) == [height width N]输入是一个2d矩阵size(input) == [height width].我需要在一行中实现以下代码.
for k = 1:size(output,3)
f = output(:,:,k);
i_zero = (f==0);
f(is_zero) = input(is_zero);
output(:,:,k) = f;
end
Run Code Online (Sandbox Code Playgroud) 我真的错过了一些非常基本的东西,
问题: 我有一个2D矩阵说
A = 8 1 6
3 5 7
4 9 2
Run Code Online (Sandbox Code Playgroud)
现在我有一些X和Y索引作为向量
X = [1 2 3]
Y = [1 2 3]
Run Code Online (Sandbox Code Playgroud)
现在我想(1,1), (2,2), (3,3)的A要分配一定的价值说1
预期产量:
out = 1 1 6
3 1 7
4 9 1
Run Code Online (Sandbox Code Playgroud) 这个问题是关于MATLAB的有效实现.使用for循环时这是微不足道的!
假设我有一个2列向量,其中每行的第一个元素是索引,第二个是实数.
我想积累属于每个索引的所有元素.
例如:
V = [1 1;
2 3;
1 4;
2 5 ];
Run Code Online (Sandbox Code Playgroud)
然后结果是:
R = [1 5; 2 8];
Run Code Online (Sandbox Code Playgroud)
第一行是因为添加第1和第3个元素得到5而第二个是添加第2和第4个元素.
我可以假设知道桶的最大数量(即桶是1..MAX),我希望结果向量具有MAX行.
我有一个要适合数据的公式列表,而不是运行一个循环,出于性能考虑,我想立即执行此操作。估算应该仍然是分开的,我不是要估算SUR或其他任何值。下面的代码做我想要的
x <- matrix(rnorm(300),ncol=3)
y <- x %*% c(1,2,3)+rnorm(100)
formulae <-list(y~x[,1],
y~x[,2],
y~x[,1] + x[,2])
lapply(formulae,lm)
Run Code Online (Sandbox Code Playgroud)
不幸的是,formulae随着增加长度的增加,这变得有些慢了,有没有办法真正将其向量化?
如果有帮助,lm我唯一关心的结果就是系数和一些标准误差。
我想做一系列的点产品.亦即
for i in range(N[0]):
for j in range(N[1]):
kr[i,j] = dot(k[i,j,:], r[i,j,:])
Run Code Online (Sandbox Code Playgroud)
有没有矢量化的方法来做到这一点,例如使用einsum或tensordot?
我有一个矢量:
A = [1 2 3 4 5];
Run Code Online (Sandbox Code Playgroud)
我想找到A(1)和其余指数之间的区别:
A(1) = 1; 1 - A = [0 -1 -2 -3 -4]
Run Code Online (Sandbox Code Playgroud)
然后我想继续A(2),直到矢量结束.所以我在彼此的所有点之间存在差异.
目前我使用循环,但它非常耗时.如何使用矢量化技术来提高性能呢?
我正在使用MATLAB 2016a
我可能会有一个较大的数据框,其中包含以下第一行:
BUCHDAT y y1 y2 y3 y4 y5 y6 y7
7 2017-02-26 577 30.0 622.0 1785.0 2633.0 422.0 10497.0 364.0
Run Code Online (Sandbox Code Playgroud)
现在我想用公式替换“ y”至“ y7”列:
df['y'] = df['y'] - df['y1']
是否有矢量化解决方案?因此,我想将此公式应用于每一列,对于下一列,公式应为:
df['y1'] = df['y1']- df['y2']
你有什么想法吗?