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:你能帮我吗。接受答案,使问题不再显示为“打开”(只需勾选最佳答案旁边的复选标记)。