【发布时间】:2012-10-05 17:28:50
【问题描述】:
我对 Perl 比较陌生,需要进行相对复杂的矩阵计算,不知道要使用什么数据结构。
不确定这是否是合适的论坛,但假设您在 Perl 的多维数组中有以下矩阵:
0.2 0.7 0.2
0.6 0.8 0.7
0.6 0.1 0.8
0.1 0.2 0.9
0.6 0.3 0.0
0.6 0.9 0.2
我正在尝试识别此矩阵中对应于高于给定阈值的连续值的 列段,例如0.5
例如,如果我们对这个矩阵设置阈值,我们有:
0 1 0
1 1 1
1 0 1
0 0 1
1 0 0
1 1 0
如果我们现在关注第一列:
0
1
1
0
1
1
我们可以看到有两个连续的段:
0 1 1 0 1 1
- 第一个 track(一个序列)以索引 1 开始,以索引 2 结束
- 第二个 track(一个序列)以索引 4 开始,以索引 5 结束
我想检测原始矩阵中的所有此类轨迹,但我不知道如何进行或哪种 Perl 数据结构最适合此。
理想情况下,我想要一些易于索引的东西,例如假设我们使用变量tracks,我可以将第一列(索引0)的索引存储如下:
# First column, first track
$tracks{0}{0}{'start'} = 1;
$tracks{0}{0}{'end'} = 2;
# First column, second track
$tracks{0}{1}{'start'} = 4;
$tracks{0}{1}{'end'} = 5;
# ...
在 Perl 中我可以使用哪些好的数据结构和/或库来解决这个问题?
【问题讨论】:
-
你考虑过 PDL 库吗?
-
谢谢! @soulSurfer2010 这是一个好主意,虽然我更喜欢使用标准 Perl 来做到这一点。
-
为什么要重新发明轮子?如果您觉得 PDL 太复杂,CPAN 上还有各种其他与矩阵相关的模块。
-
根据我的阅读,我会选择 PDL,相信我,但我不是系统管理员,让他们在系统中安装任何东西并不容易。我刚刚检查了我是否使用
use PDL;,但编译器抱怨 -
安装和使用 Perl 模块不需要系统管理员的许可(除非你真的接近磁盘配额) -- stackoverflow.com/q/251705/168657