Converint between Cell arrays and Numbers and Strings

조회 수: 2 (최근 30일)
Kash022
Kash022 2019년 1월 25일
편집: Stephen23 2019년 1월 25일
Hello,
I am trying to convert a double cell array as shown to individual 8 bit cells. (I hope I have been able to frame the question correctly, if not please take a look at my screenshot)
I want to convert each contents to individual bits, like for e.g [10000111] to individual 1 0 0 0 0 1 1 1
I have tried everything from cell2num, mat2cell, cell arrays and all but keep getting errors.
Please help me in solving this; also a little background theory on what these types of cells and 'cellarrays' mean would be a great help for next time!
Thanks,
Cheers,
kash022
  댓글 수: 2
madhan ravi
madhan ravi 2019년 1월 25일
Result=cellfun(@(x) x-'0',string(yourcellarray),'un',0)
Stephen23
Stephen23 2019년 1월 25일
편집: Stephen23 2019년 1월 25일
"Converint between Cell arrays and Numbers and Strings"
"I am trying to convert a double cell array as shown..."
Nothing in your screenshot is related to cell arrays:
Nothing in your question is related to string arrays:
After using MATLAB for more than two years it would be a good idea to learn what the basic data classes are and how to identify them:
"also a little background theory on what these types of cells and 'cellarrays' mean would be a great help for next time!"
Why not try reading the MATLAB documentation?:
PS: this is not twitter. Please do not put ugly # symbols at the start of each tag.

댓글을 달려면 로그인하십시오.

채택된 답변

Jan
Jan 2019년 1월 25일
편집: Jan 2019년 1월 25일
This obtains the digits of a decimal number:
x = 10000111;
n = floor(log10(x));
out = rem(floor(x(:) ./ power(10, n:-1:0)), 10)
>> [1 0 0 0 0 1 1 1]
I prefer this instead of the indirection of letting sprintf convert the number to a char vector and converting it back to a number.
"Cell arrays" are arrays of the class cell. These are array, which can contain elements of different sizes and classes. See:
doc cell
Example:
C = {[], 1, 1:2, 1:3, 'And a char vector also'}
If you want to store the output in one array and do not want leading zeros, you need a cell array, because the vectors have dirrent length.
x = [1, 101, 10000111];
C = cell(size(x));
nMax = floor(log10(max(x)));
P = power(10, nMax:-1:0); % Expensive power operation once only
for k = 1:numel(x)
n = floor(log10(x(k)));
C{k} = rem(floor(x(k) ./ P(nMax-n+1:end)), 10);
end
Note: You are working with Matlab since at least March 2016. You are expected to be able to read the documentation of the cell command.
  댓글 수: 3
Kash022
Kash022 2019년 1월 25일
편집: Kash022 2019년 1월 25일
@Jan what happens if I need leading zeros?
Jan
Jan 2019년 1월 25일
Leading zeros allow a simpler code:
x = 10000111;
n = floor(log10(max(x))); % Here the maximum value matters
out = rem(floor(x(:) ./ power(10, n:-1:0)), 10)

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

per isakson
per isakson 2019년 1월 25일
편집: per isakson 2019년 1월 25일
"cell array as shown" The screenshot doesn't show any cell array
Another approach
>> str = sprintf('%d', 10000111 );
>> num = reshape( sscanf( str, '%1d' ), 1,[] )
num =
1 0 0 0 0 1 1 1
>>
  댓글 수: 4
Jan
Jan 2019년 1월 25일
Exploiting the old-fashioned ASCII coding is less magic than calling sprintf, which is a huge library function. In very old Matlab versions, sprintf suffered from a bug, which allowed to gain admin privileges only by using strange format strings.
per isakson
per isakson 2019년 1월 25일
>> '€'+'ab' % undocumented behaviour(?)
ans =
8461 8462
>> "€"+"ab" % documented behaviour
ans =
"€ab"

댓글을 달려면 로그인하십시오.


Walter Roberson
Walter Roberson 2019년 1월 25일
I do not think you have a cell array at present. I think you have a double array.
OutputCell = arrayfun(@(V) sprintf('%08d', V) - '0'), YourArrayNameGoesHere, 'uniform', 0)
  댓글 수: 2
Kash022
Kash022 2019년 1월 25일
sorry..this doesn't work..it outputs [1,0,1,0,1,0,0,1] which is not what I want...
it should be like [1] [0] [1] [0] [1] [0] [0] [1]
Kash022
Kash022 2019년 1월 25일
well, it works like this now
my_cell = cell2mat(OutputCell);

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Data Type Conversion에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by