我有以下向量:
a = 1:4;
b = zeros(8,8);
我希望以下列方式在a
中添加b
:
b = [1 2 3 4 0 0 0 0
0 1 2 3 4 0 0 0
0 0 1 2 3 4 0 0
0 0 0 1 2 3 4 0
0 0 0 0 1 2 3 4
0 0 0 0 0 1 2 3
0 0 0 0 0 0 1 2
0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0]
我想使用for循环实现这一点,所以我尝试了:
for i = 2:size(b,1)
b(i,i:length(a))=a;
end
但是我收到以下错误Subscripted assignment dimension mismatch.
有人可以帮我解决这个问题吗?
答案 0 :(得分:4)
您可以使用ref = FIRDatabase.database().reference("/posts/public/countryCode/US")
query = ref.queryOrdered(byChild: "postAuthor").queryEqual(toValue: "TT4l2xyIOFRXI3RZINffcSFs67O2")
query.observeEventType(.Value, withBlock: { snapshot in
...
功能
/posts/public/countryCode/US
创建稀疏矩阵,您可以将其转换为密集矩阵:
spdiags
结果:
spdiags(repmat(1:4,8,1),0:3,9,8)
我在Octave中比较full(spdiags(repmat(1:4,8,1),0:3,9,8))
与1 2 3 4 0 0 0 0
0 1 2 3 4 0 0 0
0 0 1 2 3 4 0 0
0 0 0 1 2 3 4 0
0 0 0 0 1 2 3 4
0 0 0 0 0 1 2 3
0 0 0 0 0 0 1 2
0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0
的速度:
spdiags
比较结果:
conv2
答案 1 :(得分:2)
问题是您使用length(a)
作为:
(i:length(a)
)的第二个输入,它会在每次循环迭代时创建不同大小的向量
i = 1;
size(b(i, i:length(a)))
% 1 4
i = 2;
size(b(i, i:length(a)))
% 1 3
当您尝试将四元素向量分配给此时,显然会出现大小不匹配的情况。相反,您真正想要的是i + length(a) - 1
。
for i = 1:size(b, 1)
b(i, i:(i + length(a) - 1)) = a;
end
b = b(:, 1:8);
话虽如此,更好的选择是使用卷积(conv2
)沿对角线像这样复制你的值
tmp = conv2(a, eye(8));
output = tmp(:, 1:8);