Что означает x = x (:) означает в matlab, где x - вектор?

Это сложный вопрос для Google. Я новичок в Matlab и видел следующее утверждение, но я не вижу, как он что-то делает. Что делать x = x (:) do?

Ответ 1

: - оператор двоеточия. В этом контексте он преобразует x в одномерный вектор столбца.

Итак, этот код:

x = [ 1 3
      2 4 ];

x = x(:);

disp(x)

приводит к:

1
2
3
4

Ответ 3

Этот синтаксис обычно используется для обеспечения того, чтобы x был вектором столбца:

x = x(:)

Аналогично, эта строка гарантирует, что x является вектором строки

x = x(:)'

Ответ 4

Как говорили другие, x (:) преобразует x в вектор, вектор столбца. Дело в том, что он делает ваш код надежным для пользователя, снабжающего вектор-строку моей аварии. Например,

x = 1:5;

создал вектор ROW. Для некоторых операций потребуется вектор столбца. Поскольку x (:) ничего не делает для вектора, который уже является вектором столбца, это способ записи надежного и стабильного кода.

Конечно, если x была матрицей 3x4, она все равно преобразует x в вектор-столбец длиной 12, поэтому лучший код должен проверять такие вещи, если это проблема.

Ответ 5

x(:) изменяет вашу матрицу.

Таким образом, если ваша матрица

1 2 3
5 6 7
8 9 10

вызов x=x(:) устанавливает x в

1
5
8 
2
6
9
3
7
10

Ответ 6

Если 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 как вектор-столбец.

Ответ 7

Этот оператор сообщает 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   

назначить double с единицей8 без оператора (:):

>> bar = foo;

и он изменится на тип данных uint8:

>> whos foo bar
  Name      Size            Bytes  Class     Attributes

  bar       1x1                 8  uint8      
  foo       1x1                 1  uint8