Matlab 使用:in赋值和in for循环之间的区别
我写了一个简单的for循环:Matlab 使用:in赋值和in for循环之间的区别,matlab,Matlab,我写了一个简单的for循环: >> for m=1:3 p=m; end >> whos Name Size Bytes Class m 1x1 8 double array p 1x1 8 double array 但当我尝试为某个范围创建同一类的数据类型并检查您现在存储的变
>> for m=1:3
p=m;
end
>> whos
Name Size Bytes Class
m 1x1 8 double array
p 1x1 8 double array
但当我尝试为某个范围创建同一类的数据类型并检查您现在存储的变量不是1x1大小时:
>> k=1:256;
>> whos
Name Size Bytes Class
k 1x256 2048 double array
m 1x1 8 double array
p 1x1 8 double array
为什么m和k的变量大小不同?如果我正确理解1x1大小(变量'm'),则表示它是1x1阶的矩阵。那么为什么k变成1x256顺序呢?问题在于您将
k
声明为256个元素的向量。:
操作符创建一个向量,例如
a = 1:5
a == [1, 2, 3, 4, 5]
其中,与m
一样,您在一个工作方式不同的for循环中创建它。m
的值在1到3之间循环(即它们在向量[1,2,3]
上迭代),但在任何一点m
都只是一个标量(在循环的末尾,它的值为3),因此正如你所看到的m
是1x1
因此,如果你用另一种方式来做,那么你会得到:
for k=1:256
为您提供1x1k
但是
m=1:3
将为m
(m==[1,2,3]
)在命令提示符下键入k
,查看响应是什么。m
是一个单值,因此它的大小为单双。当您创建k
时,您正在创建一个包含256个双字节的数组
——由于每个double
都是8个字节
,您最终得到的是2048个字节
——这应该是您所期望的。在for
语句中的语义与其在裸赋值中的用法非常不同。m
将是单值(1x1
)实际上位于末尾,因为它在迭代时接受向量1:3
的值。我看到编辑正在接近它。但是,正如问题中所问的那样,关于k
,仍然存在一些困惑(这与目前的答案不同)。如果k=1:256
(如问题中所示),它将是1x256
,而不是1x1
@t。答案的第一句话说明k
是1x256,然后解释原因。1x1只是说明OP中两种方法之间差异的一个示例。