仅举个例子说明结构:
{190 10 ⍴⍵}{(⍳⍵)}1900
“ 190 ”的计算方式应为⌈⍴⍵÷10
,或者如果有一个符号表示“将所有元素打包为 R 宽的数组,让它具有所需的任意多行”。 {(⍳⍵)}1900
只是任意代码的代名词,它将生成数字的“流”,一旦将它们切成行,左侧的函数就会更多。
接下来是填充最后一行的问题,因此,如果有人也对此有一个想法(不扩大代码的大小),可以随意输入。或者,可能更紧凑的做法是先执行该部分(如果有一个简单的切片方法,只要该数字是所需原始宽度的精确倍数)?行宽稍后可能需要可变(输入,参数)。
答案 0 :(得分:1)
请让我知道以下代码是否不清楚,因为我将详细说明其工作原理。
我的Dyalog APL Extended存储库包含a cover function for ⍴
,它可以做到这一点,但是可以推广到所有等级的数组。它允许您使用¯1
来指示应该自动计算特定尺寸的长度以完全适合数据。代码如下:
⍵⍴⍨(|(×/⍴⍵)÷×/⍺)@(¯1=⊢)⍺
其中⍺
是形状矢量,⍵
是数据。 Try it!
(|(×/⍴⍵)÷×/⍺)
计算标记为¯1
的长度的长度
@(¯1=⊢)
在掩码⍺
所指示的位置用此值修改(¯1=⊢)⍺
(请参见trains)
⍵⍴⍨
使用该形状重塑⍵
(而不是将其重塑为形状⍵
)
如果仅需要矩阵,则可以在您可能使用的任何APL中执行以下操作:
(((×/⍴⍵)÷⍺),⍺)⍴⍵
其中⍺
是行数,⍵
是数据。 Try it!
如果您知道要填充最后一行(而不是错误或忽略不完整的尾随行),则基本上有三个选择:
从数据开头回收元素
带有原型元素的画笔
带有自定义填充元素的填充
这很容易,因为默认情况下⍴
就是这样做的,因此您只需要舍入(⌈
)行数:
常规Dyalog解决方案:⍵⍴⍨(⌈|(×/⍴⍵)÷×/⍺)@(¯1=⊢)⍺
Try it!
仅适用于所有APL的矩阵:((⌈(×/⍴⍵)÷⍺),⍺)⍴⍵
Try it!
为此,我们采用计算出的形状矢量的乘积,然后在使用形状矢量进行实际整形之前,将其用于“覆盖”已散布的↑
数据中的(,
个元素:
常规Dyalog解决方案:((⌈|(×/⍴⍵)÷×/⍺)@(¯1=⊢)⍺){⍺⍴(×/⍺)↑,⍵}⍵
Try it!
Marix仅适用于所有APL:((⌈(×/⍴⍵)÷⍺),⍺){⍺⍴(×/⍺)↑,⍵}⍵
Try it!
通过从所需数量中减去给定数据元素的数量,可以找到需要多少个填充元素(我将使用¯3
)。然后,我们将(,
)的许多填充元素连接到杂乱无章(,
)的数据之前,然后进行重塑:
常规Dyalog解决方案:((⌈|(×/⍴⍵)÷×/⍺)@(¯1=⊢)⍺){⍺⍴(,⍵),((×/⍺)-(×/⍴⍵))⍴¯3}⍵
Try it!
仅适用于所有APL的矩阵:((⌈(×/⍴⍵)÷⍺),⍺){⍺⍴(,⍵),((×/⍺)-(×/⍴⍵))⍴¯3}⍵
Try it!