Converint between Cell arrays and Numbers and Strings
    조회 수: 3 (최근 30일)
  
       이전 댓글 표시
    
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)
 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)
 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)
 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
  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
      
      
 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
  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
      
      
 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
      
      
 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
      
      
 2019년 1월 25일
				>> '€'+'ab'     % undocumented behaviour(?)
ans =
        8461        8462
>> "€"+"ab"     % documented behaviour
ans = 
    "€ab"
  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)
참고 항목
카테고리
				Help Center 및 File Exchange에서 Matrix Indexing에 대해 자세히 알아보기
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!





