Matlab,将数字输出转换为名称(月)

时间:2014-01-23 18:59:13

标签: string matlab output

所以我试图创建一个矩阵并过滤掉某些值,因为我只对某个限制范围内的值感兴趣。但是,更一般的情况可能更有用,所以我将从那开始:

有没有一种简单的方法可以让我的矩阵(378x1)以数月(或任何其他字符串)输出数字?所以1,13,25,37 ......等等。将被称为1月(或Jan,如果它有助于所有字符串是相同的长度)。然后是2,14,26,38 ......等。将是2月(或2月),依此类推?

提前致谢!

3 个答案:

答案 0 :(得分:2)

您可以使用

将所有月份转换为[1-12]范围
CorrectMonths = mod(MonthNames,12)

然后,您可以使用'月'功能。例如:

[MonthNum, MonthString] = month('05','mm');

返回MonthString = May

有关详细信息,请参阅http://www.mathworks.com/help/finance/month.html

您可以使用int2str函数将整数转换为字符串。 所以你可以把月份作为

[MonthNum, MonthString] = month(int2str(CorrectMonths(1)),'mm');

特定月份。

答案 1 :(得分:1)

@Dinesh指出的month函数可能很有用,但它在大多数人不会拥有的金融工具箱中(并且它需要字符串输入)。相反,您可以创建一个查找表:

Data = 1:378;
MonthIndices = mod(Data-1,12)+1; % Compensate for mod(12,12) == 0
MonthNames = {'Jan','Feb','Mar','Apr','May','Jun',...
              'Jul','Aug','Sep','Oct','Nov','Dec'};
MonthNames(MonthIndices)

MonthNames(sMonthIndices(Data>0))

由于这使用单元格数组,因此月份的名称可以是任意长度。另一种方法是使用containers.Map类:

Data = 1:378;
MonthNames = {'Jan','Feb','Mar','Apr','May','Jun',...
              'Jul','Aug','Sep','Oct','Nov','Dec'};
mapObj = containers.Map(1:12,MonthNames);
MonthIndices = mod(Data-1,12)+1;
values(mapObj,num2cell(MonthIndices))


修改

也许这更像你想要的东西。在这里,我将Data设置为一些随机值,其中一些是正数,一些是负数。代码的第一部分与上面的代码类似:

Data = randn(1,378);
DataIndices = 1:length(Data);
MonthIndices = mod(DataIndices-1,12)+1; % Compensate for mod(12,12) == 0
MonthNames = {'Jan','Feb','Mar','Apr','May','Jun',...
              'Jul','Aug','Sep','Oct','Nov','Dec'};

然后我们找到具有正数据值的月份指数:

PositiveDataMonths = MonthIndices(Data>0);

最后,histc是一个非常有用(快速)的函数,用于计算每个月有多少正值,向量n

binwidth = 1;
edges = 1:binwidth:length(MonthNames);
n = histc(PositiveDataMonths,edges);

我们可以创建一个很好的结果图:

figure;
bar(edges,n,'histc');
set(gca,'XTick',edges+binwidth/2,'XTickLabel',MonthNames);
axis([edges(1)-binwidth/2 edges(end)+3*binwidth/2 0 max(n)+1]);
ylabel('Number of Positive Values');

应该看起来像这样: histogram

答案 2 :(得分:0)

使用datestr的简单方法(不需要财务工具箱):

data = (1:15).'; %'// example data. Column vector
result = datestr([repmat(2000,size(data,1),1) data ones(size(data,1),4)],'mmmm');

此示例中的结果是

result =

January  
February 
March    
April    
May      
June     
July     
August   
September
October  
November 
December 
January  
February 
March

如果您想要三个字母的月份名称,请使用'mmm'中的'mmmm'选项(而不是datestr)。

相关问题