使用列表和矩阵

这个演示将介绍列表和矩阵的一些基本特性。我将从列表开始。然后我将打开一个新的脚本编辑器窗口。再次强调,键盘快捷键是 Ctrl+T。我将调整它的大小并重新排列。让我把日志放在日志前面。我将创建一个名为“列表”的变量。我将列表函数的结果赋值给它。单词“列表”用括号括起来,我将使用变量 a 和 b。然后我将计算 的平方根,也就是 sqrt,然后放在括号里。我将重新格式化,以便包含大小写和空格。然后我将运行脚本。日志中显示的只是已分配一个包含三个元素的列表的信息。如果我将鼠标悬停在列表上,我们会看到它存储了我输入的未求值的项。所以它是两个变量和函数平方根。在我的脚本编辑器窗口的新行中,我将请求对列表中的项目进行求值。因此,我将输入 eval list,用方括号括起来。然后我将运行这一行。这样我就能看到求值的结果。现在,我的列表仍然未被求值。因此,如果我想处理 eval list 的结果,一种方法是将求值结果赋值给一个新列表。不过,我们还有其他一些方法可以使用下标来处理列表中已求值的项。因此,在讨论这个之前,让我先谈谈对列表进行下标的一般方法。因此,我将换行。我将输入 my list,用方括号括起来。然后我将输入 a 来提取列表中的第二个项。如果我只运行这一行,我看到的就是未求值的项。那么,如果我想要求值结果呢?好吧,我实际上可以回到这里的第二行。我可以请求对列表求值,然后为结果添加下标。所以我会输入一个方括号,一个 a ,然后关闭方括号。然后我再次运行该行,使用台式电脑键盘最右侧数字键盘上的 Enter 键。这样,我只需为求值的列表添加下标即可返回结果。我们讨论过修改列表。我想换行。我将使用 insert into 命令。insert into 会就地修改列表。所以我会打开括号。我要修改哪个列表?它存储在我的列表中。这是第一个参数。我要添加什么?我将添加名字 John。这是一个字符串。如果我不在那里添加逗号,也不提供第三个参数,它就会放在列表的末尾。但我要使用逗号,并且输入 a 作为可选的第三个参数,将其放在第二个位置。然后,我只运行这一行。insert into 实际上不会在日志中返回任何内容。但是,如果我将鼠标悬停在脚本中出现的列表上,您会看到它已被修改,第二个位置是 John 这个名字。现在,假设我有一个列表,它可能是 JSL 函数返回给我的,或者例如用于收集用户输入。我需要在列表中找到一个项目以便将其删除。我知道它……嗯,我不知道它是否在列表中。我想先查询它是否在列表中。如果在,我希望能够将其删除。因此,我将创建一个变量来存储 John 项目的位置。我将其命名为 pos。我将为该变量赋值 contains 函数的结果。我们已经看到了包含字符串的情况。现在,它包含一个列表。我们正在列表中查找字符串 John,当然,它会区分大小写。如果我运行这行代码,返回并存储在变量 pos 中的结果就是。因此,如果我想从列表中删除它,例如,我可以继续在括号中输入 remove。我们正在查看我的列表。我不想只删除最后一个元素(如果我在第一个参数后不提供任何内容,就会得到最后一个元素),而是使用变量 pos。然后我运行这行代码。这将返回一个列表,其中包含被删除元素的数量。默认情况下,我们从第二个参数指定的位置开始取一个。所以我得到了一个包含该字符串的列表。如果我想在脚本的其他地方使用列表中的这个元素,我实际上可以将该结果赋值给它自己的变量。我还可以通过在返回的列表中使用 a 作为下标来提取它。所以,现在,我的列表不再包含 John 了。我将再次运行这行代码。存储在 pos 中的值仍然相同。我将运行这行代码,这样就返回了列表中不存在的字符串。如果我将鼠标悬停在列表上,我们可以看到它已恢复到之前的值。我们来简单谈谈矩阵。我将右键单击日志以清除它,然后在“脚本编辑器”窗口中选择所有内容并删除它。因此,我将首先模拟人员,他们将是我矩阵中的行。每个人将掷五次六面骰子。这将是我的列。我将使用随机数生成器来生成这些列,但我将从特定的种子值开始,这样如果您继续操作,您将获得完全相同的随机数。我们将使用一个名为 j 函数的函数,该函数将创建一个具有指定行数和列数的矩阵。这是它的前两个参数,然后是矩阵中的值,这是第三个参数。我将使用随机重置函数,其值为 。再次强调,这只是指定随机数生成器的起始种子。我将继续运行它。然后在新行中,我将创建一个变量 m,它将被赋值为 j 函数的结果。同样,我首先输入模拟人的行数,然后是列数,掷一个六面骰子五次。我将使用随机整数函数,其参数为 ,我们将从 开始,并选择最多为 的随机数。再次强调,我可以重新格式化它,让它看起来有点——哎呀,我运行了它,而不是重新格式化它。我仍然可以重新格式化它。就是这样。它现在也运行了。如果我们将对数稍微放大一点,你就会看到我有一个逐行逐列的矩阵。那么我如何引用该矩阵中的元素呢?我们使用下标。所以我将换行。我可能对第五个人第三次掷骰子的结果感兴趣。因此,我要为变量名 m 添加下标,即 m,然后使用方括号。行号用逗号表示,列号用右方括号表示,然后运行该行。因此,第五个人第三次掷骰子的结果为 a。我们可以验证这一点。因此,一、二、三、四,这是第五行,这是第三次掷骰子。现在,如果我想查找整行或整列怎么办?在这里另起一行——实际上,我将使用同一行,只需替换行中的下标即可。假设我想要整行,因此我输入第一个下标。然后在逗号后,我将输入 a,表示我不想选择任何特定的列。这将是每一列。我可以运行该程序。这样我就可以得到所有值。如果你想向上滚动,我们可以验证这些确实是行中的值。事实上,这就是我们返回的结果。我可以用同样的方式选择一列,其中我只需要用a作为行下标,然后是任意列号。但假设我想去掉一整行。假设我认为第三个人在掷骰子时作弊了。所以我将用a和a作为m的下标。然后在分号之前,我将为该行赋一个空矩阵的值。我只需打开和关闭方括号。如果我运行这行,返回到日志的是一个空矩阵。如果我将鼠标悬停在m上,你想数一下行数,你会看到现在只有9行。现在,再次尝试一下矩阵的一些用法,假设剩下的9个人每人第六次掷骰子。所以我将就地执行此操作。运算符,我将使用m。然后赋值运算符将是 Concat,也就是双竖线和一个等号。不能有空格,因为这些包含多个字符的运算符的组成部分之间不能有空格。我将再次使用 j 函数。我们只有九行,我想要一列。我将再次使用随机整数。它的参数仍然是一个六面骰子,所以我将提供。当我运行该行时,这将通过添加第六列来修改 m。所以现在您可以看到矩阵中有六列。让我们清除日志。我将重新开始为 m 赋值。我不会再使用随机数了。因此,我将清除“脚本编辑器”窗口的内容。我将初始化一个计数器变量 i,并为其赋值。因此,我将运行该程序来初始化它。然后在新的一行中,我将为 m 赋一个不同的矩阵。因此,m 将被赋值为 j 函数的结果。它将有五行。这个矩阵有五行五列,从 开始,矩阵的每个元素都会增加 i。所以我会使用 i 加 加,也就是原地加法的后置增量运算符。然后我会继续运行它。这样我就得到了一个 乘 矩阵。注意,我们是按行递增,而不是按列递增。这对于我们即将看到的另一种下标方法很重要。所以我们按行递增。现在,如果我想要一个实际上可以达到 的序列怎么办?当然有很多不同的方法可以做到这一点。但一个快速的方法是将我刚刚创建的矩阵中的每个元素乘以 。同样,我们可以将这些操作矢量化。我不必循环遍历矩阵。我只需赋值——我将进行另一个原地赋值——m,然后是星号等于,所以乘以 。我们不必原地执行。但我不会创建一个新变量,而是这样做。所以,我再次不必循环。它会逐个元素地将所有元素乘以 然后我运行它。因此,有一个矩阵,其增量为 现在,创建此矩阵的另一种方法是分两步,从索引函数开始。因此,我将清除“脚本编辑器”窗口中的内容。我将继续清除日志。然后在“脚本编辑器”窗口中,我将输入 m。它将被赋予索引函数的结果——索引用左括号括起来。我们将从 开始 我们将数到 我将在这里使用的可选第三个参数是增量。因此,我们将按 进行 这是创建矩阵的第一步,我们有按矩阵。因此,我们使用索引函数创建一个行向量。然后,我可以对其进行整形。因此,我将转到新的一行。我将再次覆盖 m。因此,m 将是整形函数的结果,该函数将 m 作为其第一个参数,并将其维度更改为五行五列。你必须非常小心地使用这个形状函数。如果你的行向量与我在这里指定的方阵不匹配,JMP 要么截断这个向量(如果你用形状指定的矩阵太小)。要么如果你指定了一个更大的矩阵,它就会开始重复这个向量。所以在使用形状函数时要小心。我想运行它。再次出现那个方阵,从到以增量递增。现在,除了 JMP 通常有很多方法可以完成所有事情之外,我想要这样做的部分原因是讨论另一种下标方法。我们已经了解了逐行下标。我想谈谈你有时会看到的单个下标。所以如果我想——我们可以将 contains 函数与——我们已经看到它与字符串一起使用。你可以将它与列表一起使用。我们可以将它与矩阵一起使用。如果我想找到矩阵中当前存储 m 的数字的位置,好吧,如果我这样描述,我会说,好的,它是行列所以我会使用逗号下标。但如果我要求 JMP 帮我找到它 - 那么我只需使用包含即可。同样,在实践中,您的脚本可能会将此结果分配给一个变量。我不需要在这里这样做 - 包含然后 m 逗号 JMP 不会给我它会给我一个单一的值。那么,这个单一值是如何工作的?单值下标 - 所以如果我回来 - 我将在这里转到一个新行并输入 m,然后输入带有单值下标的方括号并运行它。那就是单值下标将把我的矩阵视为行向量并从第一个位置开始计数。所以,当我们回到日志中查看索引函数的结果时——那个单下标会将其视为一个行向量,并按行计数,就像我们按行递增一样,以获取该值的位置。稍后,当我们处理矩阵时,我们会看到其他示例,JMP 会将那个单下标返回给我们。我们在这里要做的最后一件事只是进行一种任意计算,以说明有些函数可以将矩阵作为参数,即计算函数——我们已经看到了形状函数和包含函数。但我将在这里换行,输入 log,然后输入 m 作为其参数除以。关于这个例子的另一件事——好吧,让我运行它。然后我会告诉你关于这个例子的另一件事。我刚刚对每个元素进行了计算,然后除以。我想提一下的另一件事是,在 JSL 中,函数可以接受函数作为参数。我们将在整个过程中看到这一点。我们已经看过一些例子了。所以这个除法运算符,实际上是一个以 m 的对数作为参数的除法函数,然后我不需要计算 m 的对数并将其存储在变量中以提供给除法函数。我可以直接进行该计算。再说一次,如果我将函数写出来,它将看起来像除以左括号。用逗号和右括号替换运算符。所以我不必提供存储这些值的变量。我可以在运行除法函数时计算它们。所以这些是列表和矩阵的几个例子,以及我们可以使用这些特定类型数据结构的一些方法。
回复:使用列表和矩阵很好的介绍,谢谢。
回复:使用列表和矩阵很有帮助。