Matlab中十进制数组转换方法及将[1,2,3,4]转为单位矩阵的实现
Matlab 实用操作解答
问题1:如何在Matlab中转换十进制数值数组?
得先明确你说的“转换”具体场景,我分两种常见情况给你拆解:
情况1:转成其他进制的数值数组
如果是要把十进制数组转成二进制、十六进制这类进制的数值数组,用Matlab自带的进制转换函数就行,比如dec2bin(转二进制)、dec2hex(转十六进制),不过要注意这些函数默认返回字符数组,需要再转成数值类型:
% 示例:十进制数组转二进制数值数组 dec_array = [10, 20, 30]; bin_char = dec2bin(dec_array); % 得到字符形式的二进制数组 bin_num_array = double(bin_char) - 48; % 转成数值数组(利用ASCII码差值,'0'对应48)
转十六进制的话,把dec2bin换成dec2hex即可,要是涉及A-F的字符,可以配合hex2dec循环处理,确保得到纯数值数组。
情况2:转成不同数据类型的十进制数组
如果是想把默认的double类型十进制数组转成int8、uint16这类整数类型,直接用类型转换函数或者cast就搞定:
% 示例:double转int32类型 original_array = [1.2, 2.8, 3.5]; int_array = int32(original_array); % 自动取整,结果为[1, 3, 4] % 或者用cast函数 uint_array = cast(original_array, 'uint8'); % 转成无符号8位整数,结果同样取整
问题2:如何将数组[1,2,3,4]转换为目标对角矩阵?
这个操作超省心,Matlab的diag函数就是专门干这个的!当你传入一维数组时,它会自动生成以该数组元素为对角线的方阵:
vec = [1,2,3,4]; target_matrix = diag(vec);
运行后得到的矩阵就是你要的:
1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
要是你只是想生成4x4单位矩阵,用eye(4)更直接,但因为你的数组元素刚好是1,diag(vec)完全适用——哪怕数组元素不是1,比如[2,3,4,5],也能生成对应对角线的矩阵。
内容的提问来源于stack exchange,提问作者w404336713




