## Joining every eight columns in a matrix

Nick DeMarchis

### Nick DeMarchis (view profile)

さんによって質問されました 2019 年 5 月 22 日

### Rik (view profile)

さんによって コメントされました 2019 年 5 月 22 日
Rik

### Rik (view profile)

さんの 回答が採用されました
Hi there! Right now I have a (large by 46) double Matrix. An example is shown below:
[1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8; ...]
I'd like to update it so that it is:
['12345678' '12345678'; ...]
I know that it should be something with character joining but I'm just not quite sure of what the exact steps are.

#### 0 件のコメント

サインイン to comment.

R2019a

## 1 件の回答

2019 年 5 月 22 日

### Rik (view profile)

2019 年 5 月 22 日
採用された回答

Although it might visually be joining characters, that is not necessarily what you need. The code below should be one of the faster methods, although it breaks when your elements are larger than 9 or non-integer. The nice thing about this system is that you can replace fun with any function (or handle to a function) so you can make sure it does the conversion in a way you want.
bigData=[1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8; ...
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8; ...
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8];
a=mat2cell(bigData, ones(size(bigData,1),1), [8 8]);
fun=@(x) polyval(x,10);
b=cellfun(fun,a);
If you do want to convert to characters, do the join and convert back to double:
fun=@(x) str2double(cell2mat(cellfun(@num2str,num2cell(x),'uni',0)));
Although that function will also break for non-integer values.

Nick DeMarchis

### Nick DeMarchis (view profile)

2019 年 5 月 22 日
I've just realized that my array is actually 46 characters wide and, therefore, double spaced as seen above. I can't figure out where this is affecting the code, but it gives me an error.
How does this new information affect the code?
Rik

### Rik (view profile)

2019 年 5 月 22 日
In that case it appears your data is not actually a double array, but a char array. That makes it a bit easier, as we can just remove the spaces and optionally convert the result to a double array.
bigData=['1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8'; ...
'1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8'; ...
'1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8'];
%remove all spaces
a1=strrep(bigdata,' ','');
%divide lines in two blocks of 8 (using a cell array)
a2=mat2cell(a, ones(size(a,1),1), [8 8]);
%convert char to double
b=cellfun(@str2double,a2);

サインイン to comment.

Translated by