如何在我的 Matlab 脚本中使向量具有相同的长度?
How to make vectors be of same length in my Matlab script?
我正在尝试绘制一些数据。我在下面写的脚本以前运行良好,但现在我不知道为什么它不起作用。
代码如下:
x = [335,41,14,18,15,9,7,9,20607,5,5,143,3,5,72,134,2,28,172,3,72,173,280,186,20924,1,1,22,3,3,1,2,13,1,3,2,11,66,12983,176,123,192,64,258,182,123,299,58,198,7,113,342,72,8376,122,20,19,2,3,28,8,36,8,56,43,2,48,127,395,4664,186,46,236,219,258,69,203,189,169,72,100,78,109,46,112,3929,272,40,4,31,2,97,36,5,35,56,2,237,1672,256,224,28,163,341,151,263,157,397,94,380,173,75,87,272,1194,133,6,112,1,6,2,26,25,64,8,40,57,106,525,150,248,125,269,264,256,357,153,64,152,283,1,2,2,454,154,39,1,1,64,151,242,1,18,99,1,36,607,55,54,110,225,108,37,1,144,162,137,107,21,360,362,18,51,25,43,1,3,6,1,27,7,45,326,32,103,50,124,155,39,180,143,33,116,46,7,151,120,19,4,2,4,110,2,7,4,9,4,27,216,323,148,1,1,2,1,47,113,150,1,2,144,16,4827,1,1,1,14];
size = length(x);
disp(size);
z = 0;
for i = 1:size
z = z + 1;
y(i) = z;
end
scatter(x,y);
此代码应确保 y
与 x
的长度相同,因为我们只填写 y
只要 x 是(因为我们使用的是 for 循环1 到 size
,其中 size
基本上是 x
中的索引数),但我一直收到此错误。我检查了 disp
,结果发现我的 x 和 y 向量有不同的长度,x 是 227,y 是 256。谁能帮我解决这个小问题?
这很可能是因为 y
在您 运行 您向我们展示的那段代码之前被创建为不同的大小。在您调用这段代码之前,在您的脚本中的某处,y
被创建为一个 256 元素向量,现在您通过在 y
向量中填充元素来在这部分代码中重用该变量。变量 x
有 227 个元素,您编写的循环将更改 y
的前 227 个元素,因为您循环的次数与 x
中的元素一样多。但是,剩下的29个元素仍然存在。重用变量 y
可能是您的脚本失败的原因,因为现在两个变量之间的大小不一样。因此,显式 在调用 scatter
之前重新创建 y
。
实际上,根本不需要 for
循环。循环的目的是创建一个从 1 到与 x
.
中元素一样多的递增数组
只需这样做:
y = 1:size;
我也不喜欢你创建一个名为 size
的变量。它掩盖了函数 size
,该函数查找输入数组包含的每个维度中的元素数。
根据我上面提到的建议,将您的整个代码替换为:
x = [335,41,14,18,15,9,7,9,20607,5,5,143,3,5,72,134,2,28,172,3,72,173,280,186,20924,1,1,22,3,3,1,2,13,1,3,2,11,66,12983,176,123,192,64,258,182,123,299,58,198,7,113,342,72,8376,122,20,19,2,3,28,8,36,8,56,43,2,48,127,395,4664,186,46,236,219,258,69,203,189,169,72,100,78,109,46,112,3929,272,40,4,31,2,97,36,5,35,56,2,237,1672,256,224,28,163,341,151,263,157,397,94,380,173,75,87,272,1194,133,6,112,1,6,2,26,25,64,8,40,57,106,525,150,248,125,269,264,256,357,153,64,152,283,1,2,2,454,154,39,1,1,64,151,242,1,18,99,1,36,607,55,54,110,225,108,37,1,144,162,137,107,21,360,362,18,51,25,43,1,3,6,1,27,7,45,326,32,103,50,124,155,39,180,143,33,116,46,7,151,120,19,4,2,4,110,2,7,4,9,4,27,216,323,148,1,1,2,1,47,113,150,1,2,144,16,4827,1,1,1,14];
numX = numel(x);
y = 1 : numX;
scatter(x,y);
向量 y
现在是显式创建的,而不是重复使用过去使用先前大小创建的变量。它还使用冒号运算符显式创建此序列,而不是使用 for
循环。只是不需要 for
循环。 numel
确定输入矩阵的元素总数。我不喜欢用length
作为个人喜好,因为它找到最大维度的元素个数。这对于矢量可能工作得很好,但它确实让我很难发现我过去编写的代码中的错误。
我正在尝试绘制一些数据。我在下面写的脚本以前运行良好,但现在我不知道为什么它不起作用。
代码如下:
x = [335,41,14,18,15,9,7,9,20607,5,5,143,3,5,72,134,2,28,172,3,72,173,280,186,20924,1,1,22,3,3,1,2,13,1,3,2,11,66,12983,176,123,192,64,258,182,123,299,58,198,7,113,342,72,8376,122,20,19,2,3,28,8,36,8,56,43,2,48,127,395,4664,186,46,236,219,258,69,203,189,169,72,100,78,109,46,112,3929,272,40,4,31,2,97,36,5,35,56,2,237,1672,256,224,28,163,341,151,263,157,397,94,380,173,75,87,272,1194,133,6,112,1,6,2,26,25,64,8,40,57,106,525,150,248,125,269,264,256,357,153,64,152,283,1,2,2,454,154,39,1,1,64,151,242,1,18,99,1,36,607,55,54,110,225,108,37,1,144,162,137,107,21,360,362,18,51,25,43,1,3,6,1,27,7,45,326,32,103,50,124,155,39,180,143,33,116,46,7,151,120,19,4,2,4,110,2,7,4,9,4,27,216,323,148,1,1,2,1,47,113,150,1,2,144,16,4827,1,1,1,14];
size = length(x);
disp(size);
z = 0;
for i = 1:size
z = z + 1;
y(i) = z;
end
scatter(x,y);
此代码应确保 y
与 x
的长度相同,因为我们只填写 y
只要 x 是(因为我们使用的是 for 循环1 到 size
,其中 size
基本上是 x
中的索引数),但我一直收到此错误。我检查了 disp
,结果发现我的 x 和 y 向量有不同的长度,x 是 227,y 是 256。谁能帮我解决这个小问题?
这很可能是因为 y
在您 运行 您向我们展示的那段代码之前被创建为不同的大小。在您调用这段代码之前,在您的脚本中的某处,y
被创建为一个 256 元素向量,现在您通过在 y
向量中填充元素来在这部分代码中重用该变量。变量 x
有 227 个元素,您编写的循环将更改 y
的前 227 个元素,因为您循环的次数与 x
中的元素一样多。但是,剩下的29个元素仍然存在。重用变量 y
可能是您的脚本失败的原因,因为现在两个变量之间的大小不一样。因此,显式 在调用 scatter
之前重新创建 y
。
实际上,根本不需要 for
循环。循环的目的是创建一个从 1 到与 x
.
只需这样做:
y = 1:size;
我也不喜欢你创建一个名为 size
的变量。它掩盖了函数 size
,该函数查找输入数组包含的每个维度中的元素数。
根据我上面提到的建议,将您的整个代码替换为:
x = [335,41,14,18,15,9,7,9,20607,5,5,143,3,5,72,134,2,28,172,3,72,173,280,186,20924,1,1,22,3,3,1,2,13,1,3,2,11,66,12983,176,123,192,64,258,182,123,299,58,198,7,113,342,72,8376,122,20,19,2,3,28,8,36,8,56,43,2,48,127,395,4664,186,46,236,219,258,69,203,189,169,72,100,78,109,46,112,3929,272,40,4,31,2,97,36,5,35,56,2,237,1672,256,224,28,163,341,151,263,157,397,94,380,173,75,87,272,1194,133,6,112,1,6,2,26,25,64,8,40,57,106,525,150,248,125,269,264,256,357,153,64,152,283,1,2,2,454,154,39,1,1,64,151,242,1,18,99,1,36,607,55,54,110,225,108,37,1,144,162,137,107,21,360,362,18,51,25,43,1,3,6,1,27,7,45,326,32,103,50,124,155,39,180,143,33,116,46,7,151,120,19,4,2,4,110,2,7,4,9,4,27,216,323,148,1,1,2,1,47,113,150,1,2,144,16,4827,1,1,1,14];
numX = numel(x);
y = 1 : numX;
scatter(x,y);
向量 y
现在是显式创建的,而不是重复使用过去使用先前大小创建的变量。它还使用冒号运算符显式创建此序列,而不是使用 for
循环。只是不需要 for
循环。 numel
确定输入矩阵的元素总数。我不喜欢用length
作为个人喜好,因为它找到最大维度的元素个数。这对于矢量可能工作得很好,但它确实让我很难发现我过去编写的代码中的错误。