所以我试图创建一个矩阵并过滤掉某些值,因为我只对某个限制范围内的值感兴趣。但是,更一般的情况可能更有用,所以我将从那开始:
有没有一种简单的方法可以让我的矩阵(378x1)以数月(或任何其他字符串)输出数字?所以1,13,25,37 ......等等。将被称为1月(或Jan,如果它有助于所有字符串是相同的长度)。然后是2,14,26,38 ......等。将是2月(或2月),依此类推?
提前致谢!
答案 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');
应该看起来像这样:
答案 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
)。