根据APL语言中“Excel”表格提供的信息创建二进制矩阵

根据APL语言中“Excel”表格提供的信息创建二进制矩阵,excel,matrix,apl,Excel,Matrix,Apl,我有一个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. 首先,让我们把你的问题摆到一边: 在矩阵t中需要研究所有规则之

我有一个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.
首先,让我们把你的问题摆到一边:

在矩阵t中需要研究所有规则之后,它如何与矩阵t交互? 对,这可能涉及。我认为直接构造结果比修改预先制作的矩阵更容易

如何在矩阵m中插入值0,因为我开始矩阵m时所有元素都等于1? 修改后的作业是您的朋友:m[行;列]←1将更改特定位

这是解决这个问题的最佳策略吗? 我不这么认为。相反,让我们直接从输入矩阵创建结果矩阵

为了限制数据量,让我们解决这个问题,就像您的结果矩阵需要每小时一行,而不是每分钟一行一样。最后,我们将进行几分钟的小调整

每天将包括两个时段;一个用于维护,一个用于工作。其中一个周期的长度可能为零,但这与此无关。结果中,1表示工作时间单位,0表示维护时间单位。这意味着每天可以用两个2元素向量表示,即时间计数,1 0表示维护前的工作,0 1表示维护前的工作。时间计数中的两个元素加起来等于一天中的时间单位总数,目前为24,以后为1440。如果我们让时间计数复制/布尔向量,我们会得到设备是否工作的逐点指示

通常,我们希望在工作前进行维护,即0 1,但是如果我们明天也进行维护,并且今天是连续维护日中的奇数天,那么我们希望交换订单

让我们从定义缩放开始,这样我们可以在以后每天从24个时间单位移动到1440个时间单位:

scale ← 1
unitsPerDay ← 24 × scale
maintUnits ← maintUnits × scale
我们计算每天的工作单元数,为维护天数创建布尔矩阵,并查找11个子数组的起始位置,这表示明天有维护的天数:

workUnits ← unitsPerDay - maintUnits
maintDay ← × maintUnits
maintTomorrow ← 1 1 ⍷ maintDay
为了找出我们交换的日期,我们需要找出每运行1的运行奇偶校验。我们可以对数据进行分区并应用≠\¨在分区上,但有一种更聪明、性能更高的方法可以做到这一点。从中,我们了解如何应用≠\ 关于子向量:

351 运行奇偶校验≠ 由X表示的Y的子向量上 X←B1;Y←地下一层 ≠\Y≠X\A≠¯1↓0,A←X/≠\¯1↓0,Y
首先,让我们把你的问题摆到一边:

在矩阵t中需要研究所有规则之后,它如何与矩阵t交互? 对,这可能涉及。我认为直接构造结果比修改预先制作的矩阵更容易

如何在矩阵m中插入值0,因为我开始矩阵m时所有元素都等于1? 修改后的作业是您的朋友:m[行;列]←1将更改特定位

这是解决这个问题的最佳策略吗? 我不这么认为。相反,让我们直接从输入矩阵创建结果矩阵

为了限制数据量,让我们解决这个问题,就像您的结果矩阵需要每小时一行,而不是每分钟一行一样。最后,我们将进行几分钟的小调整

每天将包括两个时段;一个用于维护,一个用于工作。其中一个周期的长度可能为零,但这与此无关。结果中,1表示工作时间单位,0表示维护时间单位。这意味着每天可以用两个2元素向量表示,即时间计数,1 0表示维护前的工作,0 1表示维护前的工作。时间计数中的两个元素加起来等于一天中的时间单位总数,目前为24,以后为1440。如果我们让时间计数复制/布尔向量,我们会得到设备是否工作的逐点指示

通常,我们希望在工作前进行维护,即0 1,但是如果我们明天也进行维护,并且今天是连续维护日中的奇数天,那么我们希望交换订单

让我们从定义缩放开始,这样我们可以在以后每天从24个时间单位移动到1440个时间单位:

scale ← 1
unitsPerDay ← 24 × scale
maintUnits ← maintUnits × scale
我们计算每天的工作单元数,为维护天数创建布尔矩阵 ,并查找11子阵列的起始位置,这表示明天有维护的天数:

workUnits ← unitsPerDay - maintUnits
maintDay ← × maintUnits
maintTomorrow ← 1 1 ⍷ maintDay
为了找出我们交换的日期,我们需要找出每运行1的运行奇偶校验。我们可以对数据进行分区并应用≠\¨在分区上,但有一种更聪明、性能更高的方法可以做到这一点。从中,我们了解如何应用≠\ 关于子向量:

351 运行奇偶校验≠ 由X表示的Y的子向量上 X←B1;Y←地下一层 ≠\Y≠X\A≠¯1↓0,A←X/≠\¯1↓0,Y
了解您使用的APL的实现和版本会有所帮助。该实现是APL2000。实现之间是否存在严重差异?是的,其他实现没有。APL2000的词汇非常有限,但是它的文档并没有公开,所以很难准确地知道。答案必须非常保守…我明白了。。。无论如何,在我看来,这是一个更基本的问题,关于什么是原语。。。也许用If/Then/Else逻辑就能解决问题。我只是认为使用APL的指令会更容易,并且有助于学习。你有关于矩阵操作的有趣材料吗?我想你可以在APL中做一些优雅的事情,但我还没有时间回答。不过,计划尽快这样做。了解您使用的APL的实现和版本会有所帮助。实现是APL2000。实现之间是否存在严重差异?是的,其他实现没有。APL2000的词汇非常有限,但是它的文档并没有公开,所以很难准确地知道。答案必须非常保守…我明白了。。。无论如何,在我看来,这是一个更基本的问题,关于什么是原语。。。也许用If/Then/Else逻辑就能解决问题。我只是认为使用APL的指令会更容易,并且有助于学习。你有关于矩阵操作的有趣材料吗?我想你可以在APL中做一些优雅的事情,但我还没有时间回答。不过,我打算很快就这么做。我认为这部分可以让我们的日子过得更好← 2.⊃ ⍴ 正确的时间应该是装备日← ⍴ 因为表中的列表示设备的日期和行。。。在我给出的例子中,巧合的是,它们都是一样的。每天我看到用APL编写的代码,我就知道这种语言是多么有趣。我在这里测试了它,它在Dyalog中运行良好。我下载它是为了更好地学习APL。你的回答令人难以置信,很有说教性。我承认我仍在努力理解代码,但这是学习的一部分。@RodrigoMiranda是的,那是一个打字错误。现在修好了。这段代码也应该在APL2000中使用。如果您使用的是Dyalog APL,那么一些事情可能会更整洁。例如,/是一个函数,允许/¨和模式⊃ ⊂[2] X f¨⊂[2] Y只是Xf⍤是的,[2 3]和[1]都是⍪. 也可以使用现代lambda语法编写所有内容。如果您想进一步解释代码的任何部分,请告诉我。我正在尝试用APL2000V18编写代码。但是,我有一些困难。我将列出一系列疑问:1-这个表达在APL中是如何工作的?你有没有资料解释如何使用这个?工作←工作维护;规模单位日;工作单位;maintDay;明天进行保养;第一轮;奥丁伦;交换计数act2-定义维护← maintUnits×scale,但您以前没有定义maintUnits。。。所以,理论上你会用0乘以比例,对吗?这在Dyalog中是如何工作的?在APL2000中,它不起作用。规模← 一个星期一← 24倍标度维护← 我认为那部分装备好几天了← 2.⊃ ⍴ 正确的时间应该是装备日← ⍴ 因为表中的列表示设备的日期和行。。。在我给出的例子中,巧合的是,它们都是一样的。每天我看到用APL编写的代码,我就知道这种语言是多么有趣。我在这里测试了它,它在Dyalog中运行良好。我下载它是为了更好地学习APL。你的回答令人难以置信,很有说教性。我承认我仍在努力理解代码,但这是学习的一部分。@RodrigoMiranda是的,那是一个打字错误。现在修好了。这段代码也应该在APL2000中使用。如果您使用的是Dyalog APL,那么一些事情可能会更整洁。例如,/是一个函数,允许/¨和模式⊃ ⊂[2] X f¨⊂[2] Y只是Xf⍤是的,[2 3]和[1]都是⍪. 也可以使用现代lambda语法编写所有内容。如果您想进一步解释代码的任何部分,请告诉我。我正在尝试用APL2000V18编写代码。但是,我有一些困难。我将列出一系列疑问:1-这个表达在APL中是如何工作的?你有没有资料解释如何使用这个?工作←工作维护;规模单位日;工作单位;maintDay;明天进行保养;第一轮;奥丁伦;交换计数act2-定义维护← maintUnits×scale,但您以前没有定义maintUnits。。。所以,theore 你会用比例乘以0,对吗?这在Dyalog中是如何工作的?在APL2000中,它不起作用。规模← 一个星期一← 24倍标度维护← 维护×刻度