我有一个带有日出小时(whole_set_sr(的日期时间数组,一个带有日落小时(whole _set_ss(的日期日期时间数组和一个带有整个日历数据的批次(tm_whole_date(的日期时间数组。所有这些都有相同数量的元素,因此位置1应该与位置1进行测试,位置2应该与位置2进行测试,依此类推。
我正在尝试创建一个具有相同元素数的二进制数组,其中如果tm_whole_date中的元素>=,则返回1太阳升起小时(whole_set_sr(AND<=日落时间(whole_set_ss(,若超出这些条件,则为0。
我尝试了以下操作:
date_list = [];
date_indexes = [];
numel(whole_date)
for i = 1:numel(tm_whole_date)
if (tm_whole_date(i,1) >= whole_set_sr(i,1)) && tm_whole_date(i,1) <= whole_set_ss(i,1)
bin_x = 1
else
bin_x = 0
end
date_list(i) = bin_x
end
当应该有满足条件的值并返回1时,它会给我一个满是零的数组(date_list(。
此外,我需要创建一个列表,其中包含整个日期时间tm_whole_date集合中1个值的位置索引。(根据索引了解哪些元素符合标准(。
我不知道这里出了什么问题,我非常感谢你的帮助。
谢谢!
MATLAB的亮点在于,您可以在不循环的情况下对整个数组进行操作。
after_sunrise = tm_whole_date >= whole_set_sr;
before_sunset = tm_whole_date <= whole_set_ss;
date_list = after_sunrise & before_sunset;
应该是获得逻辑数组(true和false的数组/0和1(所需的全部
或者在一行中:
date_list = tm_whole_date >= whole_set_sr & tm_whole_date <= whole_set_ss;
不过,请确保whole_set_sr
和whole_set_ss
实际上包含整个日期时间,否则tm_whole_date >= whole_set_sr
和tm_whole_date <= whole_set_ss
的比较将不会产生您所期望的结果。
这种方式相对于循环和附加到数组的额外好处是,它比em>快得多。
一旦您获得了逻辑数组,获得真实的索引就像使用find
一样简单
date_indices = find(date_list);