【问题标题】:Weekend extraction in MatlabMatlab中的周末提取
【发布时间】:2026-01-28 06:15:02
【问题描述】:

我有一个大小为 364 x 5 的矩阵“timeVectorDaily”。该矩阵具有十进制天数形式的数据。 例如

734870 734870.2 734870.4 734870.6 734870.8
734871 734871.2 734871.4 734871.6 734871.8

以此类推

我只需要从“timeVectorDaily”中提取周末行。我编写代码以确定是否是周末的方法是使用 weekday 函数,该函数返回表示周日到周六的整数 1 到 7。大小为 364 x 1 的数组“arrayAllDay”具有此信息。 例如

1
2

等等

我只完成了这个阶段。有人可以帮助我如何从这里开始吗?我需要为每个周末提取 1 X 5(工作日函数返回 1 或 7)

j = length(timeVectorDaily);
arrayAllDay = zeros(j,1);
counter = 0;
for m=1:j
    [arrayAllDay(m)] = weekday(timeVectorDaily(m));
    if arrayAllDay(m) == 1
        counter = counter+1;
    elseif arrayAllDay(m) == 7
        counter = counter+1;
    end
end

【问题讨论】:

    标签: matlab weekday


    【解决方案1】:

    我们可以通过检查矩阵的第一列在输入到该函数时是否输出17 来找出weekday 函数中的哪些元素属于周末。一旦我们这样做,这将为我们提供我们可以从timeVectorDaily 中选择哪些行。

    事不宜迟:

    arrayAllDay = weekday(timeVectorDaily(:,1));
    loc = arrayAllDay == 1 | arrayAllDay == 7;
    weekendRows = timeVectorDaily(loc,:);
    

    arrayAllDay 包含从 17 的数字,这些数字告诉您该数字在一周中的哪一天。 loc 是一个逻辑数组,其中1 表示这一天是周末,0 不是。最后,weekendRows 将包含对应于周末的所有行。因此,这将生成一个M x 5 矩阵,其中M 是对应于矩阵第一列的周末总数。

    顺便说一句,参考@Shai,不建议使用ij 作为迭代变量,因为它们用于表示复数。在此处查看此链接:Using i and j as variables in Matlab。这样做会掩盖这些复杂的变量,如果您稍后进行任何复杂的分析,您可能会得到不可预知的结果。

    【讨论】:

    • @user3698120 您需要任何进一步的帮助吗?
    • @user3698120 您尚未接受任何问题的答案。请注意,如果答案满足您的需求(并且仅在这种情况下),您应该接受答案。