【发布时间】:2015-10-24 21:21:02
【问题描述】:
我有一个大小为D-by-N 的矩阵F 和一个长度为N 的向量N,由[1,a] 范围内的随机整数组成。我想创建一个大小为D * a 的矩阵M,使得每个列M(:,i) 具有从索引(A(i)-1)*D+1 到(A(i)-1)*D+D 的向量F(:,i)。
例子:
F = [1 2 3 10
4 5 6 22]
A = [3 2 1 2]
a = 4
M = [0 0 3 0
0 0 6 0
0 2 0 10
0 5 0 22
1 0 0 0
4 0 0 0
0 0 0 0
0 0 0 0]
我可以用一个简单的循环来做到这一点
for i = 1 : N
M((A(i)-1)*D+1:(A(i)-1)*D+D,i) = F(:,i);
end
但对于大型N,这可能需要一段时间。我正在寻找一种没有循环的方法。
【问题讨论】:
-
我认为这是相当快的。您是否甚至为
a / N的大值计时以检查您的陈述是否正确? -
嗯,它并不是很慢,但如果可能的话,我想要更快的东西,因为我的这部分代码在我的主算法的每次迭代中运行。在我的电脑上,
a = 3、D = 6和N = 1e6时需要3s。 -
如果
A = [3 2 1 2],a怎么可能是4?A包含从1到3的元素。 -
@Divakar 有些值可能会丢失,因为它们是随机抽样的。在这种情况下(缺少 4)矩阵的底部将为 0(在示例中为最后两行)。
-
我猜是有道理的。
标签: matlab matrix vectorization matrix-indexing submatrix