for如果可能的话,我有以下代码,我感兴趣的是从循环转换为向量操作.前提是给定结构数组data,每个元素都有一个a包含单个列向量的字段.所有字段a上的所有列向量都是相同的长度.我想从所有字段中获取每个列向量,并将数据转换为矩阵,其中每列包含来自a此数组中字段的一个列向量.这意味着第一列应该是data(1).a,第二列应该是data(2).a,依此类推.
% All arrays in 'data.a' are column vectors of equal length
% (leaving 'numCols' in incase some genius can also make that general)
[numRows,numCols] = size(data(1).a);
% Pre-allocate for speed
array1 = NaN(numRows,numCols);
% Convert from struct to array
for ii = 1:length(data)
array1(:,ii) = data(ii).a;
end
Run Code Online (Sandbox Code Playgroud) 我的目标是将包含数字列和十六进制列混合的制表符分隔数据集解析为双矩阵,其中所有值都已转换为浮点数.
我在Matlab工作.我有一个制表符分隔文件,包含数字列和十六进制列的混合,例如:
A | B | C | D
---|---|---|-----------
0x3| 1| 2| 0x118c0832
---|---|---|-----------
0x3| 3| 4| 0x118c0832
---|---|---|-----------
0x3| 5| 6| 0x118c0832
---|---|---|-----------
0x3| 7| 8| 0x118c0832
Run Code Online (Sandbox Code Playgroud)
为了解析数据,我使用了textscan()这样的函数(为简单起见,我们将跳过标题的提取并假装文件从第2行开始):
fileID = fopen('data.dat');
formatString = '%s %f %f %s';
data = textscan(fileID,formatString);
Run Code Online (Sandbox Code Playgroud)
注意:textscan()不接受十六进制转换字符%x.
此时,我留下了1x4单元阵列,data其中data{1,3}对应于包含C列内容的4x1单元阵列,即:
data{1,3} == {2; 4; 6; 8}.
一旦所有值都是数值,就可以data = cell2mat(data)将我的数据简单地转换为所需的4x4数组; 但是,由于领先优势,我正在努力寻找将十六进制单元格转换为浮点数的最简单,最快捷的方法'0x'.
我已经尝试使用的组合放在一起的东西regexp()和hex2dec(),但是这通常涉及到创建越来越多的电池阵列,因此任何解决方案似乎令人费解.
有任何想法吗?