如何在循环中从字符数组中提取特定索引?
How to pull specific indices out of a character array in a loop?
我有一个包含多个日期的数组,格式为 yyyymmdd,存储为 50x1 双精度数。我正在尝试提取年、月和日,以便我可以使用 datenum 为每个日期分配一个序列号。
索引单个日期,使用 str2num 转换,然后索引并提取适当的值工作正常,但是当我尝试遍历日期列表时它不起作用 - 仅返回数字 2 的变体.
dates = [20180910; 20180920; 20181012; 20181027; 20181103; 20181130; 20181225];
% version1
datesnums=num2str(dates); % dates is a list of dates stored as
integers
for i=1:length(datesnums)
pullyy=str2num(datesnums(1:4));
pullmm=str2num(datesnums(5:6));
pulldd=str2num(datesnums(7:8));
end
以及
%version2
datesnums=num2str(dates,'%d')
for i = 1:length(datesnums)
dd=datenum(str2num(datesnums(i(1:4))),str2num(datesnums(i(5:6))),
str2num(datesnums(i(7:8))));
end
我正在尝试生成一个新数组,它只是输入日期的序列号。在显示的示例中,我只得到单个整数值,我知道这是因为循环不正确,并且我得到的错误是 "Index exceeds the number of array elements (1)." for version 1。当我成功循环所有内容时,对于每个不正确的日期,输出只是 '2222','22,'22'。我究竟做错了什么?我需要加入元胞数组吗?
循环获取所有年月日:
datesnums=num2str(dates);
for i=1:size(datesnums, 1)
pullyy(i) = str2num(datesnums(i,1:4));
pullmm(i) = str2num(datesnums(i,5:6));
pulldd(i) = str2num(datesnums(i,7:8));
end
实际上,您可以无需循环:
pullyy = str2num(datesnums(:,1:4));
pullmm = str2num(datesnums(:,5:6));
pulldd = str2num(datesnums(:,7:8));
解释:
如果 dates
向量是一个 [6x1] 数组:
dates =[...
20190901
20170124
20191215
20130609
20141104
20190328];
比 datesnums=num2str(dates);
创建一个大小为 [6x8] 的字符矩阵,其中每一行对应于 dates
中的一个元素:
datesnums =
6×8 char array
'20190901'
'20170124'
'20191215'
'20160609'
'20191104'
'20190328'
所以在循环中你需要参考每个日期的行索引和列索引来提取年月日。
我能想到的最简单的解决方案是:
SN = datenum(num2str(dates),'yyyymmdd')
您只需指定日期格式 'yyyymmdd'
我有一个包含多个日期的数组,格式为 yyyymmdd,存储为 50x1 双精度数。我正在尝试提取年、月和日,以便我可以使用 datenum 为每个日期分配一个序列号。
索引单个日期,使用 str2num 转换,然后索引并提取适当的值工作正常,但是当我尝试遍历日期列表时它不起作用 - 仅返回数字 2 的变体.
dates = [20180910; 20180920; 20181012; 20181027; 20181103; 20181130; 20181225];
% version1
datesnums=num2str(dates); % dates is a list of dates stored as
integers
for i=1:length(datesnums)
pullyy=str2num(datesnums(1:4));
pullmm=str2num(datesnums(5:6));
pulldd=str2num(datesnums(7:8));
end
以及
%version2
datesnums=num2str(dates,'%d')
for i = 1:length(datesnums)
dd=datenum(str2num(datesnums(i(1:4))),str2num(datesnums(i(5:6))),
str2num(datesnums(i(7:8))));
end
我正在尝试生成一个新数组,它只是输入日期的序列号。在显示的示例中,我只得到单个整数值,我知道这是因为循环不正确,并且我得到的错误是 "Index exceeds the number of array elements (1)." for version 1。当我成功循环所有内容时,对于每个不正确的日期,输出只是 '2222','22,'22'。我究竟做错了什么?我需要加入元胞数组吗?
循环获取所有年月日:
datesnums=num2str(dates);
for i=1:size(datesnums, 1)
pullyy(i) = str2num(datesnums(i,1:4));
pullmm(i) = str2num(datesnums(i,5:6));
pulldd(i) = str2num(datesnums(i,7:8));
end
实际上,您可以无需循环:
pullyy = str2num(datesnums(:,1:4));
pullmm = str2num(datesnums(:,5:6));
pulldd = str2num(datesnums(:,7:8));
解释:
如果 dates
向量是一个 [6x1] 数组:
dates =[...
20190901
20170124
20191215
20130609
20141104
20190328];
比 datesnums=num2str(dates);
创建一个大小为 [6x8] 的字符矩阵,其中每一行对应于 dates
中的一个元素:
datesnums =
6×8 char array
'20190901'
'20170124'
'20191215'
'20160609'
'20191104'
'20190328'
所以在循环中你需要参考每个日期的行索引和列索引来提取年月日。
我能想到的最简单的解决方案是:
SN = datenum(num2str(dates),'yyyymmdd')
您只需指定日期格式 'yyyymmdd'