与楠MATLAB重新格式化矩阵值

此信息如下关于矩阵的重组前一个问题:与楠MATLAB重新格式化矩阵值

re-formatting a matrix in matlab

我面对的另一个问题是由下面的例子所示:

depth = [0:1:20]'; 

data = rand(1,length(depth))';

d = [depth,data];

d = [d;d(1:20,:);d];

这里我想改变这个矩阵,使每列代表一个特定的深度,每一行代表时间,所以最终我会有3行(即天)和21列(即每个深度的测量)。但是,我们无法重塑这一点,因为某一天的测量次数并不相同,即有些测量值缺失。这是众所周知的:

dd = sortrows(d,1); 

for i = 1:length(depth);

e(i) = length(dd(dd(:,1)==depth(i),:));

end

从'e'我们发现深度的数量在不同的日子里是不同的。我怎么能在矩阵中插入一个nan,以便每一天都具有相同的深度值?我可以首先找到独特的深度:

unique(d(:,1)) 由此,如果深度(来自唯一)缺少给定的一天,我想插入深度到正确的位置并将nan添加到数据列中的相应位置。这怎么能实现?

回答:

您正确地认为unique可能在这里派上用场。您还需要第三个输出参数,它将独特深度映射到原始d向量中的位置。看看这段代码 - 评论解释我做了什么

% find unique depths and their mapping onto the d array 

[depths, ~, j] = unique(d(:,1));

% find the start of every day of measurements

% the assumption here is that the depths for each day are in increasing order

days_data = [1; diff(d(:,1))<0];

% count the number of days

ndays = sum(days_data);

% map every entry in d to the correct day

days_data = cumsum(days_data);

% construct the output array full of nans

dd = nan(numel(depths), ndays);

% assing the existing measurements using linear indices

% Where data does not exist, NaN will remain

dd(sub2ind(size(dd), j, days_data)) = d(:,2)

dd =

0.5115 0.5115 0.5115

0.8194 0.8194 0.8194

0.5803 0.5803 0.5803

0.9404 0.9404 0.9404

0.3269 0.3269 0.3269

0.8546 0.8546 0.8546

0.7854 0.7854 0.7854

0.8086 0.8086 0.8086

0.5485 0.5485 0.5485

0.0663 0.0663 0.0663

0.8422 0.8422 0.8422

0.7958 0.7958 0.7958

0.1347 0.1347 0.1347

0.8326 0.8326 0.8326

0.3549 0.3549 0.3549

0.9585 0.9585 0.9585

0.1125 0.1125 0.1125

0.8541 0.8541 0.8541

0.9872 0.9872 0.9872

0.2892 0.2892 0.2892

0.4692 NaN 0.4692

你可能想转置矩阵。

回答:

从你的问题来看,你的数据看起来像什么不完全清楚,但以下内容可能会帮助你找到答案。

假设有一个列向量

day1 = 1:21';

和,最初,所有的值都是NaN

day1(:) = NaN

假设下,你必须测量的2D阵列,其中第一列表示深度,第二列表示在这些深度处的测量结果。例如

msrmnts = [1,2;2,3;4,5;6,7] % etc

然后分配

day1(msrmnts(:,1)) = msrmnts(:,2)

将在仅其索引中的msrmnts第一列中找到的那些的day1行设置的值。该第二语句使用Matlab的能力用于使用一个阵列作为一组索引到另一个阵列,例如

d([9 7 8 12 4])= 1:5

会的d[9 7 8 12 4]设定元件以值为1:5。请注意,元素的索引不需要按顺序排列。您甚至可以将相同的值多次插入索引数组,例如[4 4 5 6 3 4],尽管它不是非常有用。

以上是 与楠MATLAB重新格式化矩阵值 的全部内容, 来源链接: utcz.com/qa/265296.html

回到顶部