Amazon Best VPN GoSearch

OnWorks 网站图标

PDL::FAQp - 云端在线

通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器在 OnWorks 免费托管服务提供商中运行 PDL::FAQp

这是 PDL::FAQp 命令,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

您的姓名


PDL::FAQ - 关于 PDL 的常见问题

VERSION


当前常见问题解答版本:1.004

商品描述


这是 PDL 常见问题解答的 1.004 版,这是有关以下方面的常见问题解答的集合
PDL - Perl 数据语言。

关于我们 文件


Q: 1.1 其中 发现 Free Introduction 文件
您可以在以下位置找到本文档的最新版本
<http://pdl.perl.org/?docs=FAQ&title=Frequently%20Asked%20Questions>。

Q: 1.2 创新中心 贡献 Free Introduction 文件
这是 PDL 常见问题的重做版本。 由于可能有这么多错误
悄悄进来,许多更新可能没有进来。明确鼓励你让
我们知道您认为应该在本文档中回答的问题,但目前
不是。

同样,如果您认为本文档的某些部分不清楚,请告诉 FAQ 维护者
关于它。 从发布作者身份的人那里获得了完整的特定答案
应该指出,如果不是,让 FAQ 维护者知道。 如需更多一般信息
文中没有明确承认,而是有一个不完整的清单
本文档末尾的贡献者。 如果您觉得,请联系 FAQ 维护者
辛苦了。

将您的意见、补充、建议或更正发送到 PDL 邮件列表,网址为
[电子邮件保护]. 有关如何加入邮件的说明,请参阅下面的 Q: 3.2
列表。

一般 查询


Q: 2.1 什么是 is PDL ?
PDL代表 Perl的 时间 语言 . 用 Karl Glazebrook 的话来说,
PDL项目发起人:

PDL 的概念是赋予标准 perl5 能力
紧凑地存储和快速操作大
N维数据集是面包和黄油
科学计算。 例如 $a=$b+$c 可以添加两个
2048x2048 图像只需几分之一秒。

它为科学和数值分析提供了大量有用的功能。

对于熟悉其他科学数据评估包的读者,了解以下内容可能会有所帮助
补充一点,PDL 在很多方面类似于 IDL、MATLAB 和类似的包。 然而,它
试图改进(被 PDL 的作者)认为的许多问题
那些现有软件包的缺点。

Q: 2.2 谁是 支持 PDL? 谁是 发展 它?
PDL 受到其用户的支持。 对 PDL 的一般非正式支持是通过
PDL 邮件列表 ([电子邮件保护] , 见下文)。

作为 Perl 扩展(见下面的 Q: 2.5),它致力于自由和开放的理念
Perl 社区提出的开发。 PDL 曾经并且正在由以下机构积极开发
世界各地的一群松散的人,他们通过
PDL 开发邮件列表([电子邮件保护] ,见下面的问题:3.2)。 如果你
想加入正在进行的改进 PDL 的努力,请加入此列表。

Q: 2.3 为什么 另一个 时间 语言 ?
实际上有几个原因,每个人都应该自己决定哪些是
最重要的:

· PDL 是“自由软件”。 PDL 的作者认为这个概念有几个
优点:每个人都可以访问源 -> 更好的调试,容易适应
根据您自己的需要,可扩展为您的目的等......与商业相比
MATLAB 和 IDL 等软件包,这对于需要
想在家做一些工作,负担不起购买商业广告的可观费用
包供个人使用。

· PDL 基于强大且设计良好的脚本语言:Perl。 相比之下
它使用其他科学/数字数据分析语言设计的
一种经过验证的语言的特性,而不是从头开始存在。
在开发过程中添加功能时定义控制结构导致
对于大多数现有软件包而言,这些语言通常显得笨拙且计划不当
类似于 PDL 的范围。

· 以 Perl 为基础,PDL 程序员拥有 Perl 的所有强大功能
手,从一开始。 这包括正则表达式、关联数组
(散列),精心设计的操作系统,网络等接口。 经验
已经表明,即使在主要面向数值的编程中,它通常也非常
如果您可以轻松访问强大的半数值或完全非数值
功能也一样。 例如,您可能想要提供一个结果
复杂的计算作为网络上其他进程的服务器进程,也许
直接接受来自网络上其他进程的输入。 使用 Perl 和现有的
Perl 扩展包这样的东西根本没有问题(而且它都适合
进入您的“PDL 脚本”)。

· 极易扩展性和互操作性,因为 PDL 是 Perl 扩展;
Perl 扩展的开发支持是 Perl 的一个组成部分,并且有
已经在网络上免费提供了许多标准 Perl 的扩展。

· Perl 的整体语言特性(正则表达式、散列、对象模块)
极大地促进了 PDL 关键概念的开发和实施。 之一
关于这一点最引人注目的例子可能是 PDL::PP(见下面的 Q:6.16),一个
从简洁生成 PDL 函数的代码生成器/解析器/预处理器
说明。

· 现有的数据语言都没有遵循作者的 Perl 语言规则
坚信:

· TIMTOWTDI:有不止一种方法可以做到。 极简主义语言是
对于计算机科学家来说很有趣,但对于用户来说,有点冗余
使事情变得更容易处理并允许单独的编程风格 -
就像人们用不同的方式说话一样。 对于很多人来说,这无疑是一个
避免 PDL 的原因;)

· 简单的事情很简单,复杂的事情可能:经常做的事情
用语言应该很容易做,而很少做的事情不应该太
麻烦的

所有现有的语言都至少违反了这些规则之一。

· 作为未来的项目,PDL 应该能够使用超级计算机功能,例如
矢量能力/并行处理,GPGPU 加速。 这大概是
通过让 PDL::PP(见下面的 Q: 6.16)生成适当的代码来实现
架构来利用这些功能。

· [在这里填写你个人最喜欢的111个理由...]

Q: 2.4 什么是 is PDL 非常好 HPMC胶囊 ?
以防万一您还不知道 PDL 的主要功能是什么以及可以做什么
与他们一起,这里有一个(必要是选择性的)关键功能列表:

PDL 非常适合矩阵计算、多维数据的一般处理、
图像处理、一般科学计算、数值应用。 它支持输入/输出
对于许多流行的图像和数据格式,1D(线图)、2D(图像)和 3D(体积
可视化,通过 OpenGL 绘制表面图 - 例如使用 Mesa 或视频实现
卡 OpenGL 驱动程序)、图形显示功能并实现了许多数字和
半数值算法。

通过强大的预处理器,还可以轻松地将 Perl 连接到您喜欢的 C
例程,更多内容在下面。

Q: 2.5 什么是 is 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 地都 之间 PDL Perl的 ?
PDL 是一个 Perl5 扩展包。 因此它需要一个现有的 Perl5 安装(见
下面)运行。 此外,大部分 PDL 是用 Perl 编写的(+一些核心功能
是用 C 写的)。 PDL 程序(在语法上)只是碰巧使用的 Perl 脚本
包“PDL”实现的一些功能。

Q: 2.6 什么是 do I 需要 运行 PDL on my ?
由于 PDL 只是一个 Perl5 包,因此您首先需要在您的计算机上安装 Perl5
机器。 在撰写本文时,PDL 需要 perl 5.8 版或更高版本。 更多信息
可以在 Perl 主页上找到有关在何处以及如何获得 Perl 安装的信息
<http://www.perl.org> 以及在许多 CPAN 站点(如果您不知道什么 CPAN 是,检查
回答下一个问题)。

要构建 PDL,您还需要一个可用的 C 编译器、对 Xsubs 的支持以及包
Extutils::MakeMaker。 如果您没有编译器,则可能有二进制分发版
可用,请参阅下面的“二进制分布”。

如果您可以(或不能)让 PDL 在新的(以前不受支持的)平台上工作,我们会
喜欢听到它。 请向 PDL 邮件列表报告您的成功/失败
[电子邮件保护] . 我们将尽最大努力帮助您将 PDL 移植到新系统。

Q: 2.7 其中 do I 得到 它?
PDL 可用作源代码分发 全面的 Perl的 存档 网络 (或
CPAN) 和来自 sourceforge.net 项目页面
. CPAN 档案不仅包含
PDL 发行版以及与 Perl 相关的所有其他内容。 CPAN是
世界各地的数十个网站都反映了这一点。 主要站点是http://www.cpan.org>,
并且可以在那里找到本地 CPAN 站点(镜像)。 在 CPAN 中,您可以找到最新的
目录 /modules/by-module/PDL/ 中的 PDL 发布版本。 PDL 的主页位于
<http://pdl.perl.org> 也可以从那里下载最新版本。

Q: 2.8 什么是 do I 它们在许多情况下都能提供类似的结果。 得到 PDL?
我们很高兴能够就诸如此类的问题为您提供最好的答案
这:PDL 是*免费软件*,所有来源都是公开可用的。 但还是有
一些版权要遵守。 所以,请尽量像我们(PDL 作者)一样友善
并尝试遵守它们。

哦,在你认为它*完全*免费之前:你必须投入一些时间来拉
从网上分发,编译和安装它,(也许)阅读手册。

抵达 帮助/更多 相关信息


Q: 3.1 其中 能够 I 得到 信息 on PDL?
完整的 PDL 文档随 PDL 发行版提供。 使用命令
"perldoc PDL" 开始学习 PDL。

然而,到目前为止,熟悉 PDL 的最简单方法是使用 PDL 在线帮助
PDL shell 中的工具,“pdl2” 只需在系统提示符下键入“pdl2”。 一次
您在“pdl2”外壳类型“帮助”中。 使用“help”和“apropos”命令
在外壳内部,您应该能够找到绕过文档的方法。

更好的是,您可以立即尝试通过发布新获得的有关 PDL 的知识
PDL/Perl 命令直接在命令行中。 为了说明这个过程,这里是
PDL初学者的典型“pdl2”会话记录(冗长的输出只是象征性的
在大括号中转载( <... ...> )):

Unix> pdl2
pdl> 帮助
< ... 帮助输出 ... >
pdl> 帮助 PDL::QuickStart
< ... perldoc 页面 ... >
pdl> $a = pdl (1,5,7.3,1.0)
pdl> $b = 序列浮点数, 4, 4
pdl> 帮助内在
< ...有关“内部”功能的帮助... >
pdl> $c = 内部 $a, $b
pdl> p $c
[22.6 79.8 137 194.2]

有关可通过 Internet 访问的更多信息来源,请参见下一页
问题。

Q: 3.2 那里 other PDL 信息 来源 on 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 上网?
首先,对于所有纯粹与 Perl 相关的问题,网上有大量的资源。
好的开始点是http://www.perl.com>和http://www.perl.org>。

可以通过将您的网络浏览器指向 PDL 主页来访问http://pdl.perl.org>。
对于任何对 PDL 感兴趣的人,它都有很多好东西:

· PDL 分布

· 在线文档

· 指向 PDL 邮件列表的 HTML 存档的指针

· 已成功测试 PDL 的平台列表。

· 有关最近添加的功能、移植的库等的新闻。

· 不同 PDL 模块的当前南瓜架名称(如果您想知道
这意味着你最好看看网页)。

如果您对 PDL 感兴趣,您可以加入 PDL 邮件列表
[电子邮件保护]. 这是一个讨论 PDL 中的编程问题、报告错误、
寻求有关 PDL 相关问题的帮助等。要订阅,请填写以下表格
<http://mailman.jach.hawaii.edu/mailman/listinfo/perldl>。

此列表 (1997-2004) 上的可搜索存档和流量的超文本版本可以
可以在http://www.xray.mpe.mpg.de/mailing-lists/perldl/> . 更多最近的消息
(自 2005 年 XNUMX 月起)可在http://mailman.jach.hawaii.edu/mailman/listinfo/perldl>
.

如果您对正在进行的 PDL 开发的所有技术细节感兴趣,您可以
加入 PDL 开发人员邮件列表 [电子邮件保护] . 要订阅,请填写
格式http://mailman.jach.hawaii.edu/mailman/listinfo/pdl-porters>。

此列表 (1997-2004) 上的可搜索存档和流量的超文本版本可以
可以在http://www.xray.mpe.mpg.de/mailing-lists/pdl-porters/> . 更多最近的消息
(自 2005 年 XNUMX 月起)可在
<http://mailman.jach.hawaii.edu/mailman/listinfo/pdl-porters>。

应避免在这些列表之间交叉发布,除非有 非常 很好的理由
这样做。

Q: 3.3 什么是 is 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 当前 版本 of PDL ?
在撰写本文时(1.004 年 16 月 2013 日的常见问题解答版本 2.006),最新的稳定版本是 XNUMX。
应始终从您附近的 CPAN 镜像站点获得最新的稳定版本(请参阅
有关从何处获取 PDL 的信息,请参阅问题 2.7)。

可以从 Git 获得最新(可能不稳定)的 PDL 版本
存储库,请参阅问题 4.10 和 Git 代码的定期 CPAN 开发人员版本将
用于测试目的和更普遍的可用性。 当前的 PDL-2.006 后
开发人员发布的 PDL 可作为 CHM/PDL-2.006_07.tar.gz .

Q: 3.4 I 贡献 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 进一步 发展 of PDL。 创新中心 能够 I 帮助?
您几乎可以立即提供帮助的两种方式是 (1) 参加 CPAN 测试人员
PDL 和相关模块,以及 (2) 校对和澄清 PDL 文档,以便
它最适用于 PDL 用户,尤其是新用户。

参与 CPAN Testers 并贡献测试报告,页面
<http://wiki.cpantesters.org/wiki/QuickStart> 有关于开始的说明
“CPAN”或“CPANPLUS”用户。

如果你有一个特定的项目,你应该检查其他人是否已经在工作
或者您是否可以从现有模块中受益。 通过发布您计划的项目来做到这一点
到 PDL 开发人员邮件列表 [电子邮件保护] . 查看订阅
问题 3.2 中的说明。 我们一直在寻找编写代码和/或
文档;)。

Q: 3.5 I 认为 I 它们在许多情况下都能提供类似的结果。 发现 a 错误 in 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 当前 版本 of PDL。 什么是 I 做?
首先,确保您遇到的错误/问题尚未得到处理
本常见问题解答中的其他地方。 其次,您可以查看 PDL 的可搜索存档
邮件列表以查找是否已经讨论过此错误。 如果你还没有
找到任何可以发布错误报告的解释 [电子邮件保护] 或通过
错误链接http://pdl.perl.org> . 见 BUGS PDL 发行版中的文件
要包含哪些信息。 如果您不确定,请通过 perldl 邮件列表进行讨论
可能是最有帮助的。

安装


Q: 4.1 I 它们在许多情况下都能提供类似的结果。 问题 安装 PDL。 什么是 I 做?
首先确保您已阅读文件 载点 在分布中。 这包含一个列表
常见问题,这里不再赘述。

接下来,检查文件 配置文件 查看是否通过编辑其中的配置选项
文件,您将能够成功构建 PDL。 一些模块需要额外的
已安装软件,请参考文件 依赖 了解更多详情。 确保
编辑 perldl.conf 中这些包的位置(如果它们是非标准的)
位置。

NB Unix shell 特定:如果您想保存已编辑的 perldl.conf 以备将来使用
构建只是将其复制为 ~/.perldl.conf 进入你的主目录,它将被拾取
在 PDL 构建过程中自动执行。

此外,检查构建系统上的另一个预先存在的 PDL 版本。 多PDL
安装在同一 PATH 或 @INC 中可能会导致令人费解的测试或构建失败。

如果您仍然无法使其正常工作,请提交错误报告,包括详细信息
有关您在 perldl 邮件列表中遇到的问题的信息(
[电子邮件保护] ,另见上文)。 反应往往很快。

Q: 4.2 那里 配置 HPMC胶囊 PDL I 它们在许多情况下都能提供类似的结果。 编辑?
大多数用户不必手动编辑任何配置文件。 然而,在一些
您可能需要提供一些有关尴尬放置的信息的情况包括
文件/库,或者您可能希望明确禁用构建一些可选的 PDL
模块。 检查文件 载点配置文件 了解详情。

如果您必须手动编辑 配置文件 并对结果感到满意,您可以保持
文件方便日后参考。 把它放在 ~/.perldl.conf 将在何处取货
自动或下次构建 PDL 时使用“perl Makefile.PL PDLCONF=your_file_name”。

Q: 4.3 Do I 需要 other 软件 HPMC胶囊 乳铁蛋白 手术?
对于基本的 PDL 功能,您不需要任何额外的软件。 然而,一些
发行版中包含的可选 PDL 模块(特别是大多数图形和一些 I/O
模块)需要安装某些其他库/程序。 检查文件
依赖 在分发中获取有关如何获取这些内容的详细信息和说明。

Q: 4.4 创新中心 能够 I 安装 PDL in a 非标 地点?
要在非标准位置安装 PDL,请使用“perl
Makefile.PL”配置步骤。例如“perl Makefile.PL INSTALL_BASE=/mydir/perl5”
将配置 PDL 以安装到以“/mydir/perl5”为根的树中。 更多细节
请参阅“如何保留自己的模块/库目录?” 在 perlfaq8 和后续部分。
另一种选择是使用 local::lib 为需要的内容做大量列表
组态。

Q: 4.5 创新中心 能够 I a 完全 清洁 安装?
为了保证完全干净地安装 PDL,您需要首先删除
当前安装文件和文件夹。 这些将是名为“PDL”的所有目录
Perl @INC 路径、任何“内联”目录中名为“*Pdlpp*”的文件以及程序“pdl、
pdldoc、pdl2、perldl 和 pptemplate”。然后像往常一样构建和安装。这是
如果您总是将“PDL”安装到非标准位置,则更容易跟踪。
见上面的问题:4.4。

BINARY 分布


Q: 4.5 什么是 二进制 分布 旨在 有空吗
有关 PDL 二进制分布的信息可以在http://pdl.perl.org> . 在
目前有适用于 Linux(RedHat 和 Debian)、FreeBSD、Mac 的 PDL 二进制分发版
OS X 和 Windows,尽管它们可能不是最新版本。

如果有人有兴趣为其他架构提供二进制发行版,那
将非常受欢迎。 让我们知道 [电子邮件保护] 邮件列表。 还
检查您的 Linux 发行版的包管理器,因为现在很多都包含 PDL。 win32 的 PPM
版本(32 位和 64 位)也可用。

Q: 4.6 儿童在 PDL 运行 on Linux的? (和 什么 关于 包裹?)
是的,PDL 确实在 Linux 上运行,而且实际上大部分开发都是在 Linux 下完成的。
http://pdl.perl.org> 您可以找到一些主要软件包的链接
分布。 还要检查您的发行版的包管理器(yum、apt、urpmi...)作为
PDL 现在已被其中许多发现。

Q: 4.7 儿童在 PDL 运行 窗口?
PDL 使用 MinGW 或 Microsoft 编译器在 Win32 上构建良好。 见 win32/安装 文件
在 PDL 源代码分发中了解详细信息。 其他编译器未测试--输入
欢迎。 还有一个通过 ActiveState 的 ppm 的 PDL 分布,尽管它
可能并不总是最新版本。 PDL-2.006 在 Strawberry 上开箱即用
Perl 和 ActiveState Perl。

CVS, GIT, AND 正在进行 发展


Q: 4.8 能够 I 得到 PDL 通过 CVS?
否。 PDL 开发是在 1999 年 2009 月至 XNUMX 年 XNUMX 月期间使用 CVS 存储库进行的。
2009 年 XNUMX 月,项目切换到 Git 版本控制系统(参见
<http://git-scm.com>)。

Q: 4.9 创新中心 do I 得到 PDL 通过 吉特?
假设你的系统上安装了 Git 并且想要下载项目源代码
进入目录“PDL”。 要获得对存储库的只读访问权限,请键入
命令行

git克隆git://git.code.sf.net/p/pdl/code pdl-code

对于官方 PDL 开发人员,要在以下位置获得对存储库类型的读/写访问权限
命令行

git 克隆 ssh://[电子邮件保护]/p/pdl/code pdl-代码

Q: 4.10 I 民政事务总署 a 问题 - 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 混帐 版, 形成一种 do I if 有人 具有 提交 a
修补?
Sourceforge 系统包含一个补丁管理器,其中包含尚未发布的补丁
已应用于分配。 这可以通过 PDL 的票证菜单访问
Sourceforge 项目页面http://sourceforge.net/projects/pdl>。

此外,如果您没有订阅邮件列表,请检查邮件列表的存档
“pdl-porters”和“perldl”邮件列表。 详见问题 3.2。

Q: 4.11 I 它们在许多情况下都能提供类似的结果。 得到 开发人员 ACCESS 吉特, 形成一种 do I 上传 my 变化?
您应该做的第一件事是阅读 Git 文档并了解有关
吉特。 网上有很多资源。 但这里有一些基础知识:

在上传更改之前,将它们提交到您的存储库

添加...
git提交

或将这两者与

git 提交 -a

然后引入其他人所做的任何更改

git pull 原点

在将 PDL 推送到主存储库之前对其进行测试。 如果密码对你来说是坏的,
那么它很可能对其他人来说是坏的,他们不会很高兴拥有他们最近的 PDL
建造失败! 注意:git 可以很容易地维护一个单独的开发分支。
[待定,提供有关如何操作的信息]。

然后使用您的更改更新共享存储库(在 SF.net)

git push origin master

PDL 行话


Q: 5.1 什么是 is 穿线 (是 PDL a 新闻阅读器) ?
不幸的是,在 PDL 的上下文中,术语线程可以有两个不同的(但
相关)含义:

·当提到 载点 方向,可能在构建过程中,我们有
记住多线程的通常计算机科学含义(主要用于
多处理器机器或集群)

· piddles 操作的 PDL 线程(如索引文档中所述)是
在适当的 piddles 子切片上迭代基本操作,例如内部
a (3) pdl $a 和 (3,5,4) pdl $b 的乘积“inner $a, $b”导致 (5,4) piddle
其中每个值是 (3) pdl 与 (3) 子切片的内积结果
的 (3,5,4) 小节。 有关详细信息,请查看 PDL::Indexing

PDL 线程自然会导致潜在的并行代码,这些代码可以利用多个
多处理器机器/网络上的线程; 在那里你有
该术语的两种用法。

Q: 5.2 什么是 is a 拨弄?
好吧,PDL 标量变量(它们是特定类 Perl 对象的实例,
即有福的东西(参见“perldoc perlobj”))是常见的 PDL 用语,通常被称为
提琴 (例如,检查邮件列表档案)。 呃,清楚吗? 如果没有,只需使用
术语 iddle 当你引用一个 PDL 变量(一个 PDL 对象的实例,你可能
记住)不管 PDL 变量包含什么实际数据。

技术 查询


Q: 6.1 什么是 is perldl? 什么是 is pdl2?
有时,“perldl”(“pdl2”)用作 PDL 的同义词。 然而,严格来说,
名称“perldl”(“pdl2”)是为 PDL 附带的小外壳保留的
分发版,应该用于 PDL 脚本的交互式原型设计。
有关详细信息,请检查 perldl 或 pdl2。

Q: 6.2 创新中心 do I 得到 在线 帮助 HPMC胶囊 PDL?
只需在“pdl2”shell 提示符下键入“help”(快捷方式 =“?”),然后从那里继续。
另一个有用的命令是“apropos”(快捷方式 =“??”)命令。 还可以尝试“演示”
如果您不熟悉 PDL,请在“perldl”或“pdl2”shell 中使用命令。

操纵 OF PIDLES


Q: 6.3 I ACCESS 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 第三 element of a pdl 但是 $一[2] 工作 ?!
请参阅下一个问题的答案,为什么普通的 Perl 数组语法不适用于 piddles。

Q: 6.4 - 文档 对工资盗窃 提琴 旨在 一些 of 数组。 但是, 为什么 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 Perl的 排列 句法
工作 - 提琴 然后 ?
好吧,在某种程度上你是对的。 文档说 piddles 可以被认为是数组。 更多的
具体来说,它说( PDL::QuickStart ):

我发现使用 Perl 数据语言时它最有用
将标准 Perl @x 变量视为泛型的“列表”
“事物”和 PDL 变量(如 $x)作为“数组”,它们可以是
包含在列表或哈希中。

因此,虽然 piddles 可以被认为是某种多维数组,但它们是 而不去
Perl 意义上的数组。 相反,从 Perl 的角度来看,它们是一些特殊的
类(当前实现为指向内存中某些内容的不透明指针)和
因此需要特殊功能(或“方法”,如果您使用的是 OO 版本)来访问
单个元素或一系列元素。 要检查的功能/方法是“at”/
“set”(参见 PDL::QuickStart 中的“Sections”部分)或强大的“切片”功能
和朋友(参见 PDL::Slices 和 PDL::Indexing ,尤其是 PDL::NiceSlice )。

最后,为了让你完全迷惑,你可以使用 Perl 的 piddles 数组,例如 $spec[3] 可以
指一个 pdl 表示,例如,一个频谱,其中 $spec[3] 是第四个元素
Perl 列表(或数组;)@spec。 这可能令人困惑,但非常有用!

Q: 6.5 创新中心 do I 串联 提单?
大多数人会尝试使用一些变化从旧的 piddles 形成新的 piddles
主题: "$a = pdl([$b, 0, 2])" ,但这不起作用。 连接 piddles 的方法是
使用函数“cat”(另见“append”和“glue”)。 同样,您可以拆分 piddles
使用命令“狗”。

Q: 6.6 有时 I am 越来越 这些 奇怪 结果 ,尤其是 运用 到位 操作?
这个问题与“就地”功能有关。 从文档(见
PDL::快速入门):

大多数函数,例如 log(),返回的结果是
他们的论点的转变。 这使得好
编程实践。 但是可以进行很多操作
“就地”,这在大型阵列中可能需要
使用和内存非常宝贵。 对于这些情况
提供了操作符 inplace() 以防止额外的副本
并允许修改参数。 例如:

$x = log($array); # $array 不受影响
日志(就地($bigarray)); # $bigarray 原地改变

也来自文档!!:

显然当与一些不能使用的功能一起使用时
原位应用(例如 convolve()) 意想不到的效果可能
发生!

Q: 6.7 什么是 is Free Introduction 奇怪 用法 of 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 绳子 级联 操作者 “.=” in PDL
脚本?
请参阅有关 PDL 中分配的下一个问题。

Q: 6.8 为什么 旨在 那里 不同 of 分配 in PDL ?
这是由于当前赋值运算符“=”只允许
限制重载。 对于 PDL 的某些目的,结果证明有必要拥有
更好地控制赋值运算符的重载。 因此,PDL 仔细阅读了
运算符“.=”用于某些类型的赋值。

Q: 6.9 创新中心 do I a of 价值观 in a 拨弄?
在 Perl 5.6.7 及更高版本中,可以使用左值子例程进行此分配:

pdl> $a = 序列(5); p$a
[0 1 2 3 4]
pdl> $a->slice('1:2') .= pdl([5,6])
pdl> p $a
[0 5 6 3 4]

有关更多信息,请参阅 PDL::Lvalue。 PDL 还通过以下方式支持更像矩阵的切片语法
PDL::NiceSlice 模块:

pdl> $a(1:2) .= pdl([5,6])
pdl> p $a
[0 5 6 3 4]

使用 5.6.7 之前的 Perl 版本 or ,尤其是 运行 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 perl的 调试器 这必须
使用临时变量完成:

pdl> $a = 序列(5); p$a
[0 1 2 3 4]
pdl> $tmp = $a->slice('1:2'); p$tmp;
[1 2]
pdl> $tmp .= pdl([5, 6]); # 注意 .= !!
pdl> p $a
[0 5 6 3 4]

这也可以做成一个表达式,在PDL代码中经常看到:

pdl> ($tmp = $a->slice('1:2')) .= pdl([5,6])
pdl> p $a
[0 5 6 3 4]

Q: 6.10 能够 I 使用 a iddle in a 有条件 表达?
是的,您可以,但不是您可能首先尝试的方式。 不可能使用
piddle 直接在条件表达式中,因为这通常定义不明确。 反而
PDL 有两个非常有用的函数: "any" 和 "all" 。 使用这些来测试是否有任何或所有
piddle 中的元素满足一些标准:

pdl> $a=pdl ( 1, -2, 3);
pdl> print '$a 至少有一个元素 < 0' if (any $a < 0);
$a 至少有一个元素 < 0

pdl> 打印“$a 不是正定的”,除非(所有 $a > 0);
$a 不是正定的

Q: 6.11 合乎逻辑 运营商 提琴 - '||' '&&' 工作!
您尝试使用
构造如

$mask = which($piddle > 1 && $piddle < 2); # 不正确

本篇 而不去 工作! 您正在寻找的是 按位 逻辑运算符“|” 和
'&' 在逐个元素的基础上工作。 所以其实很简单:不要使用
多元素 piddles 上的逻辑运算符,因为这确实没有意义,而是
把例子写成:

$mask = which($piddle > 1 & $piddle < 2);

哪个工作正常。

⁠高级课程 主题


Q: 6.12 什么是 is a pdl ?
“null”是“empty piddle”的特殊标记。 空 pdl 可用于标记为 PDL
函数,它应该创建一个适当大小和类型的 piddle。 皮德斯可以
用于 PDL 函数需要 产量 or 临时 论据。 输出
临时 参数在 签名 带有“[o]”和
"[t]" 限定词(如果您不知道什么是 签名 PDL 函数
是)。 例如,您可以调用“sumover”函数,如下所示:

求和 $a, $b=null;

相当于

$b = 求和 $a;

如果这看起来仍然有点模糊,请检查 PDL::Indexing 和 PDL::PP 以了解有关调用的详细信息
约定, 签名穿线 (另见下文)。

Q: 6.13 什么是 is 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 签名 of a PDL function ?
- 签名 函数是 PDL 中的一个重要概念。 许多(但不是全部)PDL
函数有一个 签名 指定参数及其(最小)
维度。 举个例子,看看“maximum”函数的签名:

'一个); [o] b;'

这表示“最大值”需要两个参数,第一个参数(至少)是一个-
维,而第二个是零维的,一个 产量 参数(标记为
“[o]”限定符)。 如果使用更高维度的 piddles 调用该函数,则
函数将被重复调用这些适当的 piddles 切片
维度(这称为 穿线 在 PDL 中)。

有关详细信息和进一步解释,请参阅 PDL::Indexing 和 PDL::PP 。

Q: 6.14 创新中心 能够 I 子类 (继承 从) 提单?
简短的回答是:阅读 PDL::Objects(例如在 目录 or
pdl2 贝壳)。

更长的答案(从 PDL::Objects 中提取):由于 PDL 对象是不透明的
对 C 结构的引用,不可能通过例如额外的数据来扩展 PDL 类
子分类(就像您可以使用基于散列的 Perl 对象所做的那样)。 为了规避这个问题
PDL 具有内置支持以通过以下方式扩展 PDL 类 有一个 祝福的关系
哈希值。 你可以得到 有一个 表现得像 IS-A 只是因为您分配了 PDL 对象
到名为“PDL”的属性并重新定义方法 初始化()。 例如:

包 FOO;

@FOO::ISA = qw(PDL);
子初始化{
我的 $class = shift;
我的 $self = {
creation_time => time(), # 必要的扩展 :-)
PDL => PDL->null, # 用于存储 PDL 对象
};
保佑 $self, $class;
}

另一个例子检查脚本 t/子类.t 在 PDL 分布中。

Q: 6.15 什么是 on 地球 is Free Introduction 数据流 东西 ?
Dataflow 是一个实验项目,您无需关心(它
不应干扰您通常的编程)。 但是,如果你想知道,有一个
看看 PDL::Dataflow 。 有一些应用程序将受益于此功能(和
它已经在幕后工作)。

Q: 6.16 什么是 is PDL::PP?
简单回答:PDL::PP 既是外部库和 PDL 之间的粘合剂,又是一个简洁的
用于编写 PDL 函数的语言。

稍微长一点的答案:PDL::PP 用于将非常简洁的定义编译成 XSUB
用 C 实现的例程,可以很容易地从 PDL 中调用,并且可以自动
支持线程、数据流和其他事情,而您不必担心。

有关更多详细信息,请查看 PDL::PP 和以下有关 PDL 扩展的部分。

Q: 6.17 什么是 发生 ,尤其是 I 它们在许多情况下都能提供类似的结果。 几个 引用 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 PDL 对象 in 不同
变量 (克隆, 等等?) ?
Piddles 在很多方面都像 Perl 引用。 所以当你说

$a = pdl[0,1,2,3];
$b = $a;

然后 $b 和 $a 都指向同一个对象,例如然后说

$b++;

将*不*创建原始 piddle 的副本,而只是在原地增加,其中您
可以通过说说服自己

打印 $a;
[1 2 3 4]

这不应被误认为是连接多个 *不同* 对象的数据流,因此
数据更改在如此链接的 piddles 之间传播(尽管,在某些情况下
情况下,dataflown piddles 可以在物理上共享相同的数据)。

在传递 piddle 时牢记 piddle 的“参考性质”很重要
进入子程序。 如果你修改了输入的 piddles 你修改了原来的参数, 而不去 a
它的副本。 这与其他一些数组处理语言不同,但有助于
在子程序之间非常有效地传递 piddles。 如果不想修改
原始参数而不是它的副本只是显式创建一个副本(这个例子也
演示如何正确检查 明确的 请求就地处理,假设
您的日常工作可以就地进行):

子 myfunc {
我的 $pdl = shift;
如果($pdl->is_inplace){
$pdl->就地设置(0)
} {
# 默认修改一个副本
$pdl = $pdl->复制
}
$pdl->set(0,0);
返回 $pdl;
}

其他条款


Q: 6.18 什么是 I / O 格式 旨在 支持的 by PDL ?
当前版本的 PDL 已经支持多种不同的 I/O 格式。
然而,哪个模块实现哪种格式并不总是很明显。 为了帮助您找到
您需要的格式的正确模块,这是当前列表的简短列表
I/O 格式和在哪个模块中找到实现的提示:

· 用于 PDL 的自制快速原始(二进制)I/O 格式由 FastRaw 模块实现

· FlexRaw 模块实现了“原始”数据输入和输出的通用方法
数组。 特别是,它旨在读取 FORTRAN 77 UNFORMATTED 的输出
文件和低级 C“写入”函数,即使文件被压缩或
压缩包。

FastRaw 功能可能会包含在 FlexRaw 模块中
在未来的某个时候。

· FITS I/O 由 PDL::IO::FITS 中的 "wfits"/"rfits" 函数实现。

· 使用“rcols”和“rgrep”可以实现各种格式的ASCII文件I/O
函数,也在 PDL::IO::Misc 中。

· PDL::IO::Pic 实现了一个 NetPBM/PBM+ 过滤器的接口来读/写几个
流行的图像格式; 还支持将图像序列输出为 MPEG 电影,
GIF 动画和各种其他视频格式。

· 在 CPAN 上,您可以找到适用于当前发布的 PDL::NetCDF 模块
PDL 2.006 版本。

有关更多详细信息,请参阅 PDL::IO 文档中的更详细列表或
各个模块的文档。

Q: 6.19 创新中心 能够 I a of 2D 数组 (图片) a 3D 拨弄?
假设所有数组的大小相同,并且采用“rpic”识别的某种格式(参见
PDL::IO::Pic ) 你可以说:

使用 PDL::IO::Pic;
@names = qw/name1.tif .... nameN.tif/; # 一些文件名
$dummy = PDL->rpic($names[0]);
$cube = PDL->zeroes($dummy->type,$dummy->dims,$#names+1); # 制作 3D piddle
对于 (0..$#names) {
# 这是切片赋值
($tmp = $cube->slice(":,:,($_)")) .= PDL->rpic($names[$_]);
}

or

$cube(:,:,($_)) .= PDL->rpic($names[$_]);

对于使用新的 PDL::NiceSlice 语法和 Lvalue 赋值的切片赋值。

for 循环将实际图像读入一个临时的 2D piddle,其值为
分配(使用重载的“.=”运算符)到 3D piddle 的适当切片
$立方体。

Q: 6.20 其中 旨在 测试 HPMC胶囊 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 图像 模块?
这个答案主要适用于 PDL::Graphics::TriD(PDL 的设备独立 3D 图形
模型)这是这方面最棘手的一个。 您可以在其中找到一些测试脚本
分发中的演示/TriD。 还有 3dtest.pl线3d ,在
PDL/Example/TriD 目录。 构建 PDL 后,您可以执行以下操作:

perl -Mblib 示例/TriD/3dtest.pl

perl -Mblib 示例/TriD/line3d.pl

尝试两个 TriD 测试程序。 他们每个人只行使一项 TriD 功能,但他们的
如果需要,使用 Perl 调试器可以轻松调试,请参阅 perldbug。

Demo 目录中的程序最容易从“perldl”或“pdl2”运行
交互式外壳:

perl -Mblib perldl 或 perl -Mblib Perldl2/pdl2

在提示符后跟“demo 3d”或“demo 3d2”。 “演示”本身会给你一个列表
可用的 PDL 演示。

您可以通过更改为手动运行 Demos/TriD 目录中的测试脚本
目录和运行

perl -Mblib

其中“测试文件”; 应该匹配模式“test[3-9].p”并观察结果。 一些
测试应该打开一个窗口,您可以在其中控制(旋转)3D 对象
鼠。 尝试使用鼠标按钮 1 在 3D 空间中转动对象,鼠标按钮 3 为
放大和缩小,按 'q' 进入下一阶段的测试。

Q: 6.21 什么是 is 三重诊断 or PDL::TriD or PDL::图形::TriD?
在 PDL 在线帮助系统中,这样的问题应该成为过去。
地方。 试试(安装后):

un*x> pdl2
pdl> apropos trid

检查有希望的命中的输出,然后尝试查找其中的一些,例如

pdl> 帮助 PDL::Graphics::TriD

请注意,大小写与 "help" 无关,但与 "apropos" 无关。

Q: 6.22 规划图 而不去 输出 PNG 文件。
PGPLOT 和 PNG 文件有几个问题来源。 首先,在编译时
pgplot 库,请确保取消注释中的 PNG 条目 驱动程序列表 文件。 然后
运行“make”时,您可能会遇到类似的错误

C

要解决此问题,请在“makefile”中找到以“pndriv.o:”开头的行(它靠近
底部)。 例如,将 ./png.h 更改为 /usr/include/png.h,如果这是您的标题
文件是(你有 libpng 和 libz devel 包,不是吗?)。 为所有人做这件事
该行上有四个条目,然后返回并运行“make”。

其次,如果您已经安装了 PGPLOT Perl 模块和 PDL,您可能尝试过
写出一个 PNG 文件并收到如下致命错误消息:

C

这是因为 PGPLOT Perl 模块不会自动链接到 png 和 z
图书馆。 因此,当您从 CPAN 安装 PGPLOT Perl 模块(版本 2.19)时,
不要“安装 PGPLOT”,而要“获取 PGPLOT”。 然后退出CPAN并手动
安装 PGPLOT,这样调用 makefile:

C/ usr / lib目录>

假设存在 /usr/lib/libpng.so.*、/usr/lib/libz.so.* 等文件。 然后做
标准“制作;制作测试;制作安装;” 序列。 现在您可以从
PDL!

EXTENSIONS OF PDL


Q: 7.1 I am 寻找 HPMC胶囊 a do XXX in PDL。 其中 I HPMC胶囊 它?
第一站又是“perldl”或“pdl2”以及在线帮助或 PDL 文档。
PDL 中已经有很多您可能不知道的功能。 这
查找功能的最简单方法是使用“apropos”命令:

pdl> apropos '积分'
ceil 以浮点格式舍入到整数值
floor 以浮点格式舍入到整数值
通过对 N-1 维积分进行转化的项目
rint 以浮点格式舍入到整数值

由于 apropos 命令不是复杂的搜索引擎,因此请确保您搜索
几个相关主题并使用短语。

但是,很有可能您需要的不是 PDL 发行版的一部分。 你
然后建议退房http://pdl.perl.org> 哪里有包列表
使用 PDL。 如果这不能解决您的问题,请在邮件列表中询问,如果没有其他问题
您可能会获得帮助,让您自己将包与 PDL 接口,请参阅
还有下一个问题。

Q: 7.2 能够 I ACCESS my C/FORTRAN语言 图书馆 例程 in PDL?
是的,您可以,实际上对于许多简单的应用程序来说它非常简单。 你想要的是
PDL 预处理器 PP (PDL::PP)。 这将允许您为 C 制作一个简单的界面
常规。

您需要学习(至少首先)的两个函数是“pp_def”,它定义了
调用函数的接口,指定输入和输出参数,并包含
链接到外部库的代码。 另一个命令是“pp_end”,它完成
PP 定义。 有关详细信息,请参阅 PDL::PP 手册页,但我们也有一个有效的
例子在这里。

双八总和(int n)
{
int i;
双和,x;

总和 = 0.0; x=0.0;
对于 (i=1; i<=n; i++) {
x++;
总和 += x/((4.0*x*x-1.0)*(4.0*x*x-1.0));
}
返回 1.0/sum;
}

我们将在此处向您展示如何将 C 代码与 PDL 接口的示例。 这是第一个
示例并将向您展示如何近似数字 8...

上面显示的 C 代码是一个简单的函数,返回一个双精度值,并期望一个
整数 - 总和中的项数 - 作为输入。 这个函数可以定义在
库,或者像我们在这里所做的那样,作为内联函数。

我们将把 Makefile 的写入推迟到以后。 首先我们将构建“.pd”
文件。 这是包含 PDL::PP 代码的文件。 我们称之为“XNUMX.pd”。

#
# pp_def 定义了一个 PDL 函数。
#
pp_addhdr(
'
双八总和(int n)
{
int i;
双和,x;

总和 = 0.0; x=0.0;
对于 (i=1; i<=n; i++) {
x++;
总和 += x/((4.0*x*x-1.0)*(4.0*x*x-1.0));
}
返回 1.0/sum;

}
');

pp_def (
'八',
Pars => 'int a(); 双 [o]b();',
代码 => '$b()=eight_sum($a());'
);

# 总是确保你完成了你的 PP 声明
#pp_done

pp_done();

我们的例子的一个特点是我们用“pp_addhdr”包含了整个代码
而不是链接它。这仅用于示例目的,在典型的
您将使用“pp_addhdr”来包含头文件。 请注意,参数为
“pp_addhdr”用引号括起来。

然而,在这个例子中最重要的是“pp_def”命令。 第一个论点
这是新函数的名称 ,然后是真正的肉的哈希:

· 这给出了输入参数(此处为“a”)和输出参数(此处为“b”)。 这
后者由“[o]”说明符指示。 两个参数都可以有一个类型
规格如下所示。

可以指定界面中的许多变化和进一步的灵活性。 看
“perldoc PDL::PP”了解详情。

· 此开关包含应执行的代码。 正如你所看到的,这是一个相当
C 和 Perl 的特殊组合,但本质上它就像你用 C 编写的一样,但是
从 PDL 传递的变量被区别对待并且必须被引用
以前面的“$”开头。

还有一些简单的宏来传递指向数据的指针并获得
其他 Perl 数量,请参阅手册页以获取更多详细信息。

最后注意文件末尾对“pp_done()”的调用。 这在所有PP中都是必需的
文件。

好的。 所以现在我们有一个包含代码的文件,我们非常希望通过 PDL 在 Perl 中使用它。 到
为此,我们需要编译该函数,为此我们需要一个 Makefile。

使用 PDL::Core::Dev;
使用 ExtUtils::MakeMaker;
PDL::Core::Dev->import();

$package = ["eight.pd",Eight,PDL::Eight];
%hash = pdlpp_stdargs($package);

WriteMakefile(%hash);

子 MY::postamble {pdlpp_postamble($package)};

上面的代码应该放在一个名为 Makefile.PL 的文件中,随后应该调用它
以标准 Perl 方式: "perl Makefile.PL" 。 这应该给你一个 Makefile 和
运行“make”应该为你编译模块,“make install”将为你安装它
你。

Q: 7.3 创新中心 能够 I 接口 XXX in PDL?
这个问题与上一个问题密切相关,正如我们在那里所说的,PDL::PP
预处理器是将外部包与 PDL 接口的标准方式。 最多
通常使用 PDL::PP 的方法是编写一个简短的接口例程,请参阅 PDL::PP perldoc
页面和上一个问题的答案作为示例。

但是,也可以通过在
PDL::PP 直接。 这在某些情况下会很方便,特别是如果您有
期望函数作为输入的例程,并且您希望将函数传递给 Perl
功能方便。

PDL::PP perldoc 页面是编写 PDL::PP 扩展的主要信息来源,
但是在 PDL 的分发中查找文件非常有用,因为许多核心
函数是用 PDL::PP 编写的。 查找以“.pd”结尾的文件,这通常是
接受 PDL::PP 文件的后缀。 但我们这里也有一个简单的例子。

下面的例子将向你展示如何编写一个简单的函数来自动
允许穿线。 为了使这个简洁,这个例子是一个几乎微不足道的功能,但是
目的是展示编写 PDL::PP 接口的基础知识。

我们将编写一个简单的函数来计算一个的最小值、最大值和平均值
拨弄。 在我的机器上,结果函数比内置函数快 8 倍
“统计数据”(当然后者也计算中位数)。

让我们直接跳进去。这是代码(来自一个名为“quickstats.pd”的文件)

#
pp_def('快速统计',
解析 => 'a(n); [o]avg(); [o]max(); [o]min()',
代码 => '$GENERIC(a) curmax, curmin;
$GENERIC(a) tmp=0;
循环(n)%{
tmp += $a();
if (!n || $a() > curmax) { curmax = $a();}
if (!n || $a() < curmin) { curmin = $a();}
%}
$avg() = tmp/$SIZE(n);
$max() = curmax;
$min() = 姜敏;
'
);

pp_done();

上面的内容可能看起来像是 C 和 Perl 的混合体,但在特殊的背后
语法在于一种非常强大的语言。 让我们一行一行地理解。

第一行声明我们开始定义一个名为 PDL:PP 的函数
“快速统计”。

第二行非常重要,因为它指定了输入和输出参数
功能。 a(n) 告诉我们有一个输入参数,我们将其称为“a”
预计它是一个长度为 n 的向量(同样的矩阵,方阵和
矩形将分别写为“a(n,n)”和“a(n,m)”)。 表明
东西是一个输出参数,我们把“[o]”放在他们的名字前面,所以指回来
到代码我们看到avg,max,min是三个输出参数,都是
标量(因为它们没有指示尺寸大小。

第三行开始了代码定义,它本质上是纯 C 语言,但有几个
方便的功能。 $GENERIC 是一个返回其参数的 C 类型的函数 -
这里输入参数a。 因此代码部分的前两行是可变的
声明。

loop(n) 结构是一个方便的函数,它在称为 n 的维度上循环
参数部分。 在这个循环中,我们计算输入的累积总和
向量并跟踪最大值和最小值。 最后我们分配结果
输出参数的值。

最后,我们用 "pp_done()" 完成我们的函数声明。

为了编译我们的新函数,我们需要创建一个 Makefile,我们将只列出它,因为
它的创建在前面的问题中讨论过。

使用 PDL::Core::Dev;
使用 ExtUtils::MakeMaker;
PDL::Core::Dev->import();

$package = ["quickstats.pd",Quickstats,PDL::Quickstats];
%hash = pdlpp_stdargs($package);

WriteMakefile(%hash);

子 MY::postamble {pdlpp_postamble($package)};

一个示例 Makefile.PL

我们的新统计函数现在应该使用久经考验的 Perl 方式进行编译:“perl
生成文件.PL; 制作” 。

你应该试验这个函数,改变计算和输入和输出
参数。 结合 PDL::PP perldoc 页面,这应该可以让您快速
直接在 PDL::PP 中编写更高级的例程。

使用 onworks.net 服务在线使用 PDL::FAQp


免费服务器和工作站

下载 Windows 和 Linux 应用程序

Linux 命令

Ad




×
广告
❤️在这里购物、预订或购买——免费,有助于保持服务免费。