Matrix 如何在APL中生成包含0-9和a-z的随机数组
Matrix 如何在APL中生成包含0-9和a-z的随机数组,matrix,random,apl,Matrix,Random,Apl,?5⍴CHARS其中CHARS是一个包含0-z的变量 roll运算符不接受字符,因为它包含的元素不是非负整数,即字母a-z。如果我正确理解了您的问题,您需要一个由0-z字符组成的5×5矩阵,那么让我们一块一块地做: 首先,我们创建一个字符向量CHARS←⎕A。请注意,此向量包含大写字母。如果需要小写,则需要使用I-Beam操作819,如chars←819⌶⎕A 然后,由于您需要数字0-9,我们需要手动将它们添加到chars向量中,或者使用⎕木卫一←0,这就是我在本例中要做的。因此,在索引原点设置
?5⍴CHARS
其中CHARS
是一个包含0-z的变量
roll运算符不接受字符,因为它包含的元素不是非负整数,即字母a-z。如果我正确理解了您的问题,您需要一个由0-z字符组成的5×5矩阵,那么让我们一块一块地做: 首先,我们创建一个字符向量
CHARS←⎕A
。请注意,此向量包含大写字母。如果需要小写,则需要使用I-Beam操作819,如chars←819⌶⎕A
然后,由于您需要数字0-9,我们需要手动将它们添加到chars
向量中,或者使用⎕木卫一←0
,这就是我在本例中要做的。因此,在索引原点设置为0的情况下,我们通过执行chars将数字0-9添加到向量中,←⍳10
。变量chars
现在返回abcdefghijklmnopqrstuvwxyz 0 1 2 3 4 5 6 7 8 9
最后,我们需要随机选择这些元素来填充矩阵。要对数字和字符的混合向量执行此操作,我们将随机选择它们的索引,而不是滚动向量:
chars[?≢chars]
将滚动向量的随机元素。因为我们需要不止一个元素,所以我们将使用chars[(≢chars)⍴≢字符]
。这将滚动≢字符
,即36,向量的随机元素
这样做之后,我们将其重塑为一个5×5矩阵。我们的最终代码是5⍴字符(≢chars)⍴≢字符]
如果您愿意,您可以在这个方便的网站上逐步查看:
?5⍴nums
其中nums
是一个非负整数列表,可能无论如何都无法满足您的需要,因为它将重塑nums
,然后对每个整数进行滚动。实际上,您将拥有5⍴(?nums[1])(?nums[2])(?nums[3])
相反,我假设您希望5×5矩阵的每个元素都包含一个随机的字符0–9和a–z,并进行替换。有关不同的假设,请参见
正如J.Sallé提到的,大写字母是⎕A
在Dyalog APL中,我们可以使用819获得小写字母⌶⎕A
(819是A),而APLX有⎕a
。数字为⎕D
在Dyalog APL和APLX中,因此所有36个可能的字符都是符号←⎕D、 819⌶⎕A
或符号←⎕D⎕a
。在其他APL系统上,您可能需要生成字符列表;见脚注
我们可以用索引得到符号的随机索引←?5 5⍴36
最后,我们进行实际索引以获得结果<代码>符号[索引]
作为一个班轮,它是:
(⎕D,819⌶⎕A)[?5 5⍴36]
我们可以将其推广到一个效用函数,该函数以形状作为左参数,元素列表作为右参数:
{⍵[?⍺⍴≢⍵]}
这里,≢⍵
是元素的数量,⍺代码>是形状。这适用于许多系统(例如Dyalog、GNU和ngn)。以下内容适用于所有系统:
∇ array←shape Random data
array←data[?shape⍴⍴data]
∇
如何在任何APL系统上生成字符列表:
⎕AV[∊-⎕IO-(⍳¨10 26)+⎕AV⍳'0a']
⎕AV[
…]
为AtomicVector(字符集)编制索引:
<代码>⎕成人影片⍳'0a'
其中的“0”和“a”的索引
<代码>(…)+
添加以下内容:
<代码>⍳¨10 26 前10个和前26个指数
<代码>-⎕IO- 如果⎕IO
(IndexOrigin)是1,因为-(1-x)
与x-1
<代码>∊代码> ϵnlist(展平以将两个字符向量合并为一个)
不会
'abcdefghijklmnopqrstuvxyz012456789'[5⍴36?36]
(5 x 5阵列中的唯一字符)
或
'abcdefghijklmnopqrstuvxyz012456789'[?5⍴36]
(潜在重复字符)
怎么办?在任何地方工作,都应该在每一个APL工作。@RichardAdams:你能帮我吗。接受答案,使问题不再显示为“打开”(只需勾选最佳答案旁边的复选标记)。