Matlab实现二进制矩阵转换为十进制

一.问题描述  

  [1 1 1 0 1

  0 1 1 0 1

  0 0 1 1 0]

每两位3转换为一个十进制数,共5列,那么转换后是ceil(5/3)=2列。

  [7 1

  6 1

  1 2]

二.问题分析

  1.每八个字符划分为一个十进制,nwords=ceil(size(b,2)/8)

  2.按列处理每行的字符,只不过1到8是一组,为第一列;9到17是二组,为第2列。

  cb = zeros([size(b,1),nwords],‘uint8‘)

  for(j=1:size(b,2))

  {

    w = ceil(j/8);

    //用bitset(A,bit,Value),bit没组都是1到8

    cb(:,w) = bitset(cb(:,w),mod(j-1,8)+1,b(:,j))

  }

三.实现

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function cb = compactbit(b)
%
% b = bits array
% cb = compacted string of bits (using words of ‘word‘ bits)

[nSamples nbits] = size(b);
nwords = ceil(nbits/8);%向上取整(正无穷方向)压缩bit->word.
cb = zeros([nSamples nwords], ‘uint8‘);

for j = 1:nbits
    w = ceil(j/8);
    cb(:,w) = bitset(cb(:,w), mod(j-1,8)+1, b(:,j));
end
时间: 2024-11-06 07:33:54

Matlab实现二进制矩阵转换为十进制的相关文章

Java入门:基础算法之二进制转换为十进制

Java有两种方法可以将二进制数转换为十进制数: 1)使用Integer类的Integer.parseInt()方法. 2)自己编写转换逻辑. 方法1:使用Integer.parseInt()实现二进制转换为十进制 import java.util.Scanner; class BinaryToDecimal { public static void main(String args[]){ Scanner input = new Scanner( System.in ); System.out

SWM格式权重矩阵转换为二进制格式全过程分享

在进行空间统计实验过程中,经常涉及到空间权重矩阵的处理,有时候需要将ArcGIS生成的swm格式的权重矩阵转换为形如“0 1”的方阵格式.这里将我的办法整理出来. 1.用如下工具箱生成swm格式的权重矩阵 2.将swm格式的权重矩阵转换为dbf属性表      3.用excel打开dbf将其转换为txt文本文件 4.写程序转换格式并保存 代码如下: 1 static void Main(string[] args) 2 { 3 //读取文件并转换格式 4 StreamReader sr = Fi

二进制转换为十进制

#include <stdio.h> #include <stdlib.h> /* (2)将二进制转换成十进制数. 输入二进制数输出对应的十进制数,输入“ctl + z”结束. */ int main() { char num[30]; //存储二进制数 while (fflush(stdin),scanf("%s",num) != EOF){ int number = 0; //存储十进制数 for (int i = 0; num[i] != '\0'; ++

C++读入二进制数并转换为十进制输出

题目描述 已知一个只包含0和1的二进制数,长度不大于10,将其转换为十进制并输出. 输入描述 输入一个二进制整数n,其长度不大于10 输出描述 输出转换后的十进制数,占一行 样例输入 110 样例输出 6 solution: 很多学过C初学C++的人可能想到的是用字符数组形式读入再一位一位计算成十进制输出. 没必要. C++类库提供了二进制数据类,并且可以用其方法转换成十进制. 代码如下: 1 #include <iostream> 2 using namespace std; 3 4 #in

CST.Studio.Suite.2016.SP1 电磁仿真+Mathworks.Matlab.R2016a.X64 矩阵实验室

Mathworks.Matlab.R2016a.X64 矩阵实验室 PV.Desktop.V14.0.0.1 石油化工静设备计算机辅助设计桌面系统 Agilent.Keysight.ICCAP.2016.01 Agilent.Keysight.Genesys.2015.08 Agilent.Keysight.WaferPro.Express.2015.01 Agilent.Keysight.Model.Quality(MQA).2016.01 诚信合作,质量保证:@@@@@@@@@@@@@@@@

Matlab随笔之矩阵入门知识

直接输入法创建矩阵 – 矩阵的所有元素必须放在方括号“[ ]”内: – 矩阵列元素之间必须用逗号“,”或空格隔开,每行必须用“;”隔开 – 矩阵元素可以是任何不含未定义变量的表达式.可以是实数,或者是复数. – 例a=[1,2;3,4] 或 a=[2 1+3j;sqrt(4) 5] 创建基本矩阵的函数 – 空阵 [ ] — matlab允许输入空阵,当一项操作无结果时,返回空阵 – ones(N,M) —全部元素都为1的矩阵 – zeros(N,M) —全部元素都为0的矩阵 – rand(N,M

华为初级——十六进制转换为十进制

 详解for循环(各种用法) 常见的for循环一般是一下代码这种结构: //1 for(int i=0;i<100;i++) cout<<"11\n"; //2 for(int i=100;i>0;i--) cout<<"11\n"; //3 for(int i=0;;i++) { if(i>100) break; cout<<"11\n"; //4 for(int i=0;;) { if(

负数的补码转换为十进制

一个数如果为正,则它的原码.反码.补码相同:一个正数的补码,将其转化为十进制,可以直接转换. 已知一个负数的补码,将其转换为十进制数,步骤: 1.先对各位取反: 2.将其转换为十进制数: 3.加上负号,再减去1. 例如: 11111010,最高位为1,是负数,先对各位取反得00000101,转换为十进制数得5,加上负号得-5,再减1得-6.

将八进制数转换为十进制数——java

import java.util.Scanner; /* * 编写方法,将八进制数转换为十进制数.Integer.valueOf("876",8).toString() * */ public class OctalToDecimal { public static void main(String[] args) { String oldValue; System.out.print("Input the an Octal number:"); oldValue