从t到t+的向量与a矩阵对角线的乘法;1在Matlab中
还是很新的编程 在时间t,t+1,t+2等处有9x1个向量 [10 10 10 10 10 10] 和矩阵。每个矩阵为9x9,并且在时间1,t+1,t+2等时=从t到t+的向量与a矩阵对角线的乘法;1在Matlab中,matlab,vector,matrix,multiplication,diagonal,Matlab,Vector,Matrix,Multiplication,Diagonal,还是很新的编程 在时间t,t+1,t+2等处有9x1个向量 [10 10 10 10 10 10] 和矩阵。每个矩阵为9x9,并且在时间1,t+1,t+2等时= 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0
0 0 0 0 1 0 0 0 0
0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 1
它们是3d矩阵,我想在将来把它们做成4d
我想将向量(:,:,t)乘以时间t处矩阵的对角线和输出向量(:,:,t+1)
总之
向量t乘以对角矩阵t=向量t+1
向量t+1乘以对角矩阵t+1=向量t+2
向量t+2乘以对角矩阵t+2=向量t+3。。。等等
对角线数字在每个时间步都会发生变化,但为了简单起见,让我们暂时将它们都保持在1
我尝试过使用diag,但它说明我必须使用2D输入,所以只有在忽略t时才有效
为你们的帮助干杯-它帮助我学到了很多。任何提示或解决方案都将不胜感激。我知道你们知道最简单、最有效的解决方案。给你们:
n = 10;
% Make sample data
t = zeros(9,1,n);
t(:,1,1) = 1;
T = repmat(diag(ones(9,1)), [1 1 n]);
% Loop though to fill in t based on previous t and T
for i = 2:n
t(:,1,i) = t(:,1,i-1) .* diag(T(:,:,i-1));
end
现在所有的
t
都应该是1。因为每个步骤的结果都取决于上一次迭代,所以不能对其进行矢量化。因此,我会同意他的解决方案
值得一提的是,以下是一个示例,说明如何以矢量化方式提取3D矩阵的对角线:
M = reshape(1:3*4*3,[3 4 3]);
[r,c,p] = size(M);
ind = bsxfun(@plus, (1:r+1:r*c)', (0:p-1).*r*c);
M(ind)
结果的每列对应于每个切片的对角线元素(不必是方阵):
顺便说一句,t不需要额外的尺寸。您可以将它们作为二维矩阵中的列。非常感谢!这很有道理。哇,这是一个非常优雅的解决方案。我将查找bsxfun。非常感谢。
>> M
M(:,:,1) =
1 4 7 10
2 5 8 11
3 6 9 12
M(:,:,2) =
13 16 19 22
14 17 20 23
15 18 21 24
M(:,:,3) =
25 28 31 34
26 29 32 35
27 30 33 36
>> M(ind)
ans =
1 13 25
5 17 29
9 21 33