谷歌这个问题很难。我是Matlab的新手并看到了以下声明,但我看不出它是如何做的。 doe x = x(:) do?
答案 0 :(得分:13)
答案 1 :(得分:2)
x(:)将数组转换为列向量。
答案 2 :(得分:2)
此语法通常用于确保x
是列向量:
x = x(:)
同样,此行确保x
是行向量
x = x(:)'
答案 3 :(得分:2)
正如其他人所说,x(:)将x转换为矢量,特别是列矢量。关键是它使你的代码对我的事故提供行向量的用户健壮。例如,
x = 1:5;
创建了一个ROW向量。某些操作需要列向量。由于x(:)对已经是列向量的向量没有任何作用,因此这是一种编写健壮,稳定代码的方法。
当然,如果x是3x4矩阵,它仍然会将x转换为长度为12的列向量,因此最好的代码需要测试类似的东西,如果它是一个问题。
答案 4 :(得分:1)
x(:)
重塑你的矩阵。
因此,如果你的矩阵是
1 2 3
5 6 7
8 9 10
调用x=x(:)
将x
设置为
1
5
8
2
6
9
3
7
10
答案 5 :(得分:1)
如果x是矩阵,如下所示:3 * 3矩阵,
x=[1,2,3;4,5,6;7,8,9];
x=x(:);
语句x = x(:)将矩阵列为列向量。 输出将是
1
2
3
4
5
6
7
8
9
当x是行向量时,获得的结果相同。
因此通常,x(:)将x的元素列为列向量。
答案 6 :(得分:1)
此运算符告诉matlab也尝试转换数据类型。
例如:
两种数据类型都设置为完全不同的类型:
>> foo = uint8(0);
>> bar = double(0);
使用" whos"检查数据类型命令:
>> whos foo bar
Name Size Bytes Class Attributes
bar 1x1 8 double
foo 1x1 1 uint8
使用(:)运算符将uint8分配到double:
>> bar(:) = foo;
它仍然是双重
>> whos foo bar
Name Size Bytes Class Attributes
bar 1x1 8 double
foo 1x1 1 uint8
使用没有(:)运算符的unit8分配double:
>> bar = foo;
并且它更改为uint8数据类型:
>> whos foo bar
Name Size Bytes Class Attributes
bar 1x1 8 uint8
foo 1x1 1 uint8