从matlab中的单元格中删除字符
eliminate chars from cell in matlab
我有一个包含 2015 年所有日期的向量,即:
'01.01.2015'
'02.01.2015'
.
.
.
'31.12.2015'
如何消除列表中的日子?这样结果就是这样的列表:
'01.2015'
'01.2015'
.
.
.
'12.2015'
'12.2015'
非常感谢!此外,如果我知道如何从一个日期中删除天数,这将是一个很大的帮助。谢谢!
如果您的日期总是采用相同的格式,您可以通过简单的 cellfun
调用来实现:
testdates = {'01.01.2015';'02.01.2015';'03.01.2015';'04.01.2015'};
myrange = [1:2 6:10];
newdates = cellfun(@(x) x(myrange), testdates, 'UniformOutput', false);
哪个returns:
newdates =
'01.2015'
'02.2015'
'03.2015'
'04.2015'
cellfun
对元胞数组中的每个元胞应用一些函数。我在这里使用它的目的是使用应用于每个单元格的 myrange
索引创建一个新数组。请注意,这不是一种稳健的方法,一旦您的日期格式发生变化,它就会失效。
要获得更稳健的方法,您可以考虑使用 datenum
and datestr
:
testdates = {'01.01.2015';'02.01.2015';'03.01.2015';'04.01.2015'};
serialdates = datenum(testdates, 'mm.dd.yyyy');
newdates = datestr(serialdates, 'mm.yyyy');
哪个returns:
newdates =
01.2015
02.2015
03.2015
04.2015
如果您的日期格式发生变化(或在数组中发生变化),这也会中断,但行为比 cellfun
调用更明确。
由于所有字符串的格式都相同,因此您可以 select 每个字符串中从第 4 个字符开始到最后一个字符的字符:
DatesCell = {'01.01.2015';'02.01.2015';'21.12.2015'}
NewDates = cellfun(@(x) x(4:end),DatesCell,'uni',0)
这段代码使用了cellfun
,这只是变相的for循环
以下等价:
DatesCell = {'01.01.2015';'02.01.2015';'21.12.2015'}
NewDatesLoop = cell(numel(DatesCell),1);
for k =1:numel(DatesCell)
NewDatesLoop{k} = DatesCell{k}(4:end);
end
输出:
NewDates =
'01.2015'
'01.2015'
'12.2015'
NewDatesLoop =
'01.2015'
'01.2015'
'12.2015'
我有一个包含 2015 年所有日期的向量,即:
'01.01.2015'
'02.01.2015'
.
.
.
'31.12.2015'
如何消除列表中的日子?这样结果就是这样的列表:
'01.2015'
'01.2015'
.
.
.
'12.2015'
'12.2015'
非常感谢!此外,如果我知道如何从一个日期中删除天数,这将是一个很大的帮助。谢谢!
如果您的日期总是采用相同的格式,您可以通过简单的 cellfun
调用来实现:
testdates = {'01.01.2015';'02.01.2015';'03.01.2015';'04.01.2015'};
myrange = [1:2 6:10];
newdates = cellfun(@(x) x(myrange), testdates, 'UniformOutput', false);
哪个returns:
newdates =
'01.2015'
'02.2015'
'03.2015'
'04.2015'
cellfun
对元胞数组中的每个元胞应用一些函数。我在这里使用它的目的是使用应用于每个单元格的 myrange
索引创建一个新数组。请注意,这不是一种稳健的方法,一旦您的日期格式发生变化,它就会失效。
要获得更稳健的方法,您可以考虑使用 datenum
and datestr
:
testdates = {'01.01.2015';'02.01.2015';'03.01.2015';'04.01.2015'};
serialdates = datenum(testdates, 'mm.dd.yyyy');
newdates = datestr(serialdates, 'mm.yyyy');
哪个returns:
newdates =
01.2015
02.2015
03.2015
04.2015
如果您的日期格式发生变化(或在数组中发生变化),这也会中断,但行为比 cellfun
调用更明确。
由于所有字符串的格式都相同,因此您可以 select 每个字符串中从第 4 个字符开始到最后一个字符的字符:
DatesCell = {'01.01.2015';'02.01.2015';'21.12.2015'}
NewDates = cellfun(@(x) x(4:end),DatesCell,'uni',0)
这段代码使用了cellfun
,这只是变相的for循环
以下等价:
DatesCell = {'01.01.2015';'02.01.2015';'21.12.2015'}
NewDatesLoop = cell(numel(DatesCell),1);
for k =1:numel(DatesCell)
NewDatesLoop{k} = DatesCell{k}(4:end);
end
输出:
NewDates =
'01.2015'
'01.2015'
'12.2015'
NewDatesLoop =
'01.2015'
'01.2015'
'12.2015'