我想循环遍历306X20矩阵中的每一列,NaN值填充空白区域,我想为每一行创建一个直方图(以20个直方图结束)。最好的方法是什么?我想实现的伪代码:
For i = 1:(number of columns)
% Loop through each column to generate a different histogram with the same
% x and y labels and title
% hist(data, 20)
end
谢谢
答案 0 :(得分:2)
我假设您想为每个直方图分别绘制一个数字。这可以通过for循环和figure
- 语句轻松实现,以在每次迭代中打开一个新数字。在Matlab版本R2014b及更高版本中,使用histogram
- 函数绘制直方图,在R2014b以下版本中使用hist
代替(hist
仍在R2014b及以上版本中工作)。这两个函数都忽略了NaN
- 数据集中的值。
% generate random data with NaN-values
x = randn(306,20);
a = randi(5,[306,20]);
x(a==3) = NaN;
% plot the histograms
for i = 1:size(x,2)
figure;
histogram(x(:,i)) % before R2014b use "hist" instead
title(['Histogram of row ',num2str(i)]);
xlabel('Bins');
ylabel('Frequency');
end
这为最后一行提供了以下结果:
答案 1 :(得分:0)
您可以使用unique
和bsxfun
的组合。结果将是包含唯一值的单元格数组values
和包含这些值出现的count
。
A= [1 2 5; 1 7 NaN]; % // Test data
% // Convert it to a cell array so that we can apply a function to each row
B=mat2cell(A, [size(A,1)] ,[ones(size(A,2),1).']);
% // Find the unique values
[values,ia,indvalues]=cellfun(@unique,B,'UniformOutput',false);
% // Count the unique occurrencies.
count = cellfun(@(M) sum( bsxfun(@eq, M, unique(M)') )', B, 'UniformOutput',false);
>> values{1}
ans =
1
>> count{1}
ans =
2