Объединить массив 1 x N в массив 1 x 1 без использования цикла в MATLAB - PullRequest
1 голос
/ 12 октября 2009

У меня есть двойной массив 1 x N, и я хотел бы объединить его в массив 1 x 1.

например. K = [0,1,1,1];

Я хочу, чтобы K стал K = [0111];

Как мне это сделать?

Ответы [ 3 ]

4 голосов
/ 12 октября 2009

Вот милый способ сделать это в одной строке:

>> K = [1 2 3 4];
>> K*10.^(length(K)-1:-1:0)'
ans =
        1234

РЕДАКТИРОВАТЬ: новый, супер короткий путь сейчас.

2 голосов
/ 12 октября 2009

Поскольку вы объединяете массив нулей и единиц в одно значение, у вас возникнут проблемы с его правильным представлением в виде double значения. Это связано с тем, что любые начальные нули с левой стороны числа не будут отображаться, когда они двойные. Тем не менее, вы можете представить строку нулей и единиц в виде массива символ . Небольшая хитрость для этого заключается в следующем:

>> K = [0,1,1,1];
>> char(K+'0')

ans =

0111

Когда вы добавляете вектор значений типа double (K) и скалярную строку ('0'), строка преобразуется в значение ASCII / Unicode (в данном случае 48). K+'0' становится вектором [48 49 49 49], а функция CHAR меняет эти значения на эквивалентные символы ASCII / Unicode, создавая массив символов.

0 голосов
/ 12 октября 2009

Из вашего примера я предполагаю, что вы просто хотите объединить элементы вектора (видя, что k=[0111] на самом деле хранит число 111). Поэтому, если вы хотите оставить их как есть, вместо этого мы используем строку:

>> K = [0,1,1,1];
>> str = sprintf('%d', K)
str =
0111
>> whos str
  Name      Size            Bytes  Class    Attributes
  str       1x4                 8  char  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...