Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何添加不同长度的向量?_Matlab_Vector_Octave - Fatal编程技术网

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) 非常感谢大家=)这在

我想在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)

非常感谢大家=)

这在数学上没有任何意义,但如果你坚持,你可以这样做:

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)
。哇!非常感谢您提供了非常详细的解决方案!这正是我想要做的