首页 > 解决方案 > 根据 APL 语言中的“Excel”表提供的信息创建二进制矩阵

问题描述

我有一个 APL 挑战要解决。我在表格 (Excel) 中收到信息,其中线条代表设备,列代表一年中的天数。在每个单元格中,我都有关于该设备将接受维护的小时数的信息。

当表格单元格的值为 0 时,表示不会进行维护,设备将全天工作。当表格单元格有非0值时,表示该值代表设备维修小时数。

例如,我在下面展示了该表的一部分作为示例:

设备/数据 20 年 1 月 1 日 20 年 1 月 2 日 20 年 1 月 3 日
设备 1 0 8 0
设备2 0 12 8
设备 3 8 12 8

但是,我需要创建一个矩阵,其中列是设备,每一行代表另一个表中日期的分钟......并且每一天应该转换为:24 小时 x 60 分钟 = 1440 行(527040 行最幸福的一年)。每个元素的值为 1 表示设备工作,0 表示设备不工作。

另外,维护时间的分配也有规则:

  1. 如果单元格的值不是 0,并且之前和之后日期的值为 0,则维护开始时间为 00:00。使用示例表,这发生在设备 1 上;然后,在最终矩阵中,在第 1 行到第 1440 行的第 1 列中,将放置值 1;从第 1441 行到第 1921 行(表示表中的 8 点钟),将放置值 0,然后放置值 1,直到该矩阵的末尾(第 4320 行)。
  2. 如果单元格的值不是 0 并且在以后的日期,则小时数必须满足。使用示例表,这发生在设备 2 上;然后,在最终矩阵中,在第 1 到 2161 行的第 2 列中,将放置值 1;从第 2161 行到第 3361 行(表示表格中一天的 12 点和连续第二天的 8 点),将放置 0 的值,然后放置 1 的值,直到该矩阵的末尾(第 4320 行)。
  3. 如果单元格的值不是 0 并且在接下来的两天内;加入前两天。使用示例表,这发生在设备 3 上;然后,在最终矩阵中,在第 1 行到第 960 行的第 3 列中,将放置值 1;从第 961 行到第 2161 行(代表表中连续一天的 8 点和另一天的 12 点)将放置 0 值;从第 2162 行到第 2880 行,值为 1;从第 2881 行到第 3361 行(代表最后一天的 8 小时),然后是 1 的值,直到该矩阵的末尾(第 4320 行)。

设备可能会停止几天(表格单元格中的值为 24),但只要它们遵循上述规则,就可以了。

我是 APL 语言的初学者,所以我想从以下开始:

t ← 3 3 ⍴ 0 8 0 0 12 8 8 12 8   ⍝ just to test, in the real case I will import the excel table
(nc nd) ← ⍴ t                   ⍝ the number of rows in the table will be the number of columns (nc) of the matrix and the number of days will generate the number of its rows (nr)
nr ← nd × 24 × 60               ⍝ calculation of the number of rows
m ← nr nc ⍴ 1                   ⍝ creating the matrix with all values equal to 1

到目前为止,我设法想到了……我对上面代码的开头有几个疑问:

  1. 在矩阵 t 中需要研究所有规则之后,它如何与矩阵 t 交互?
  2. 如何在矩阵 m 中插入值 0,因为我开始矩阵 m 时所有元素都等于 1?
  3. 这会是解决这个问题的最佳策略吗?

那么,你能帮我解决这个问题吗?

标签: excelmatrixapl

解决方案



推荐阅读