Matlab 如何添加不同长度的向量?
我想在Matlab或倍频程中添加两个不同长度的向量。例如Matlab 如何添加不同长度的向量?,matlab,vector,octave,Matlab,Vector,Octave,我想在Matlab或倍频程中添加两个不同长度的向量。例如 aa = [1 2 3 4]; bb = [100 100]; 这将导致向量cc包含 cc = [101 102 3 4] 有人知道怎么做吗 更新:这是我最后得到的信号代码,后来我将其转换为灰度图像 load train; t = y; load chirp; c = y; tc = c + [t; zeros(length(c) - length(t),1)]; plot(1:length(tc),tc) 非常感谢大家=)这在
aa = [1 2 3 4];
bb = [100 100];
这将导致向量cc包含
cc = [101 102 3 4]
有人知道怎么做吗
更新:这是我最后得到的信号代码,后来我将其转换为灰度图像
load train;
t = y;
load chirp;
c = y;
tc = c + [t; zeros(length(c) - length(t),1)];
plot(1:length(tc),tc)
非常感谢大家=)这在数学上没有任何意义,但如果你坚持,你可以这样做:
cc = aa + [bb zeros(1,2)];
我已经十年没有使用MATLAB了,但我认为您必须执行以下操作:
cc = aa + [bb zeros(1, length(aa) - length(bb))]
对于处理一组向量的一维情况,其他答案指出了正确的解决方案(包括用零填充较短的向量或使用子索引对较长的向量进行加法)。然而,由于您在一篇评论中提到,您最终希望将两个灰度图像添加到一起,因此我想向您展示一个更通用的矩阵二维解决方案 首先,我将加载一些内置的MATLAB示例图像,并获取它们的大小:
image1 = rgb2gray(imread('peppers.png'));
image2 = imread('cameraman.tif');
[r1, c1] = size(image1);
[r2, c2] = size(image2);
请注意,我首先使用将RGB图像转换为灰度。接下来,我将创建一个新的零矩阵,其大小是两个图像大小中的最大值:
newImage = zeros(max(r1, r2), max(c1, c2), 'uint8');
请注意,我在对的调用中包括了'uint8'
,因为您希望零矩阵的类型与图像的类型相同,以便对其执行后续操作。矩阵newImage
现在足够大,可以包含两个图像中的任何一个。最后,可以将图像添加到新图像中,如下所示:
newImage(1:r1, 1:c1) = image1; % Insert image 1
newImage(1:r2, 1:c2) = newImage(1:r2, 1:c2)+image2; % Add image 2
您可以通过以下方式查看它们:
imagesc(newImage);
colormap(gray);
<强>注释:< /强>一个重要的事情要考虑的是你使用的图像类型。通常,加载到MATLAB中的图像数据类型为。但是,您可能会注意到,如上所述添加两个8位无符号整数图像可能会导致像素超过255(8位无符号整数的最大值)的饱和。结果是图像的某些部分看起来是明亮的白色,并且失去了细节(请注意上面较小图像上重叠的一些辣椒)。您可能希望通过在添加图像之前缩放图像中的值来避免这种情况,或者通过将图像转换为类型来执行操作,然后在重新保存图像之前缩放图像来避免这种情况。
如果给定aa大于bb,则我会这样做:cc = aa;
cc(1:length(bb)) = cc(1:length(bb)) + bb;
酷。这是因为我有两个矩阵,它们实际上是我想添加的灰度图。现在我想把你的解决方案推广到matrixs=)是的,它确实是这样,例如,当把信号当作向量(意味着z变换)时,它会给出“错误:不平衡或意外的括号或括号。”但是“cc=aa+[bb zeros(1,length(bb));”起作用了=)@Louise,我的错,它应该是
length
而不是size
。zero(1,length(bb))
起作用只是巧合,因为length(bb)=length(aa)-length(bb)
。哇!非常感谢您提供了非常详细的解决方案!这正是我想要做的