How to create a binary matrix
이전 댓글 표시
I want to make matrix whose each element's size will be 1 bit, i.e, it will be a binary matrix.How can I do it?
Thanks in advance.
답변 (5개)
Jan
2011년 7월 20일
There is not BIT type in Matlab. Usually binary arrays are stored as LOGICAL, which are equivalent to UINT8. E.g.:
B = rand(16, 16) > 0.8;
whos('B')
Now you can pack this in blocks of 8 elements to a UINT8 array:
T = 2 .^ (0:7).';
B8 = transpose(reshape(B, 8, []));
BitArray = uint8(B8 * T);
Friedrich
2011년 7월 20일
0 개 추천
Hi,
this is not possible in MATLAB and in other languages too like C or C++. In modern computer architectures, a byte is the smallest addressable unit of memory. To pack multiple bits into a byte requires applying extra bit-shift operations. At the compiler level, it's a trade off of memory vs. speed requirements (and in high-performance software, those extra bit-shift operations can add up and slow down the application needlessly).
댓글 수: 3
snake eyes
2011년 7월 20일
Walter Roberson
2011년 7월 20일
C does not specify whether bit-fields start from the beginning or the end of a word, and C permits but does not require bit-fields to cross words. In C, arrays of bit-fields are arrays of words: the "packed" attribute possibility was removed from the C language before C was standardized. There is thus no binary matrix in C, just arrays of structs whose members are bit fields.
Walter Roberson
2011년 7월 20일
Well, in _popular_ computer architectures; bit-sliced and bit-addressable architectures still have their purposes.
Sean de Wolski
2011년 7월 20일
To get logical binary values either use:
x = logical(x)
or any conditional operator e.g.
x = x>7
x = x==11;
Image Analyst
2017년 5월 22일
편집: Image Analyst
2017년 5월 22일
Use true():
t = true(numRows, numColumns);
"whos" will show you it's one byte per element, like the other solutions.
>> t = true(4,5)
t =
4×5 logical array
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
>> whos t
Name Size Bytes Class Attributes
t 4x5 20 logical
To get one bit per element, instead of one byte per element, I think you'll have to pack them together yourself.
Ekta Gujral
2017년 7월 19일
0 개 추천
A = randi([0 1], n,m)
댓글 수: 1
Walter Roberson
2017년 7월 19일
This produces an array of double, not bits.
카테고리
도움말 센터 및 File Exchange에서 Operators and Elementary Operations에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!