问题标签 [scientific-computing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scientific-computing - 什么样的工作受益于 OpenCL
首先:
- 我很清楚 OpenCL 不会神奇地让一切变得更快
- 我很清楚 OpenCL 有局限性
所以现在我的问题是,我习惯于使用编程进行不同的科学计算。我使用的一些东西在计算的复杂性和数量方面非常紧张。所以我想知道,也许我可以使用 OpenCL 加快速度。
所以,我很想听听你们对以下一些[链接奖励]的回答:
*什么样的计算/算法/一般问题适合OpenCL
*确定某些特定代码是否会因迁移到 OpenCL 而受益的一般准则是什么?
问候
math - LISP 中的向量计算
如何在 lisp 中执行向量计算,例如向量的大小、向量的范数、距离(两点之间)、点积、叉积等。
谢谢。
python - 当您的输入是千兆/太字节大小时会发生什么变化?
我今天刚刚迈出了真正的科学计算的第一步,当时我看到一个数据集,其中最小的文件是 48000 个字段乘 1600 行(几个人的单倍型,对于 22 号染色体)。这被认为是微小的。
我编写 Python,所以在过去的几个小时里我一直在阅读有关 HDF5、Numpy 和 PyTable 的内容,但我仍然觉得我并没有真正理解 TB 大小的数据集对我作为程序员的实际意义。
比如有人指出,数据集比较大,把整个东西读进内存就变得不可能了,不是因为机器内存不够,而是因为架构地址空间不够!这让我大吃一惊。
我在课堂上还依赖于哪些其他假设在输入这么大的情况下不起作用?我需要开始以不同的方式做或思考哪些事情?(这不一定是特定于 Python 的。)
python - 按规范值管理科学数据依赖图的python解决方案
我有一个看起来很笼统的科学数据管理问题,但我找不到现有的解决方案,甚至找不到它的描述,这让我很困惑。我即将开始一次重大的重写(python),但我想我会为现有的解决方案投最后一次,所以我可以放弃自己的并回到生物学,或者至少学习一些合适的语言以便更好地进行谷歌搜索.
问题:我有昂贵的(数小时到数天来计算)和大(GB)的数据属性,这些属性通常是作为一个或多个其他数据属性的转换而构建的。我需要准确跟踪这些数据是如何构建的,这样如果它适合问题(使用正确的规范值构建)或根据需要构建新数据,我就可以将其用作另一个转换的输入。尽管这无关紧要,但我通常会从“增值”的有点异质的分子生物学信息开始,例如,基因组中的基因和蛋白质由其他研究人员的其他过程注释。我需要结合和比较这些数据来做出自己的推论。通常需要许多中间步骤,而且这些步骤可能很昂贵。此外,最终结果可以成为其他转换的输入。所有这些转换都可以通过多种方式完成:使用不同的初始数据(例如使用不同的生物体)进行限制,在相同的推理中使用不同的参数值,或者使用不同的推理模型等。分析经常变化并建立在其他分析之上以计划外的方式。我需要知道我拥有哪些数据(哪些参数或规范完全定义了它),这样我才能在适当的时候重复使用它,以及为了一般的科学完整性。
我的总体努力:我在设计我的 python 类时考虑到了描述问题。类对象构建的所有数据属性都由一组参数值描述。我将这些定义参数或规范称为“def_specs”,这些 def_specs 及其值称为数据 atts 的“形状”。进程的整个全局参数状态可能非常大(例如一百个参数),但任何一个类提供的数据 atts 只需要其中的一小部分,至少直接需要。目标是通过测试它们的形状是否是全局参数状态的子集来检查先前构建的数据 atts 是否合适。
在一个类中,通过检查代码很容易找到定义形状所需的 def_specs。当一个模块需要来自另一个模块的数据时,就会出现问题。这些数据 atts 将有自己的形状,可能由调用对象作为 args 传递,但更多时候是从全局参数状态中过滤出来的。调用类应该增加其依赖的形状,以维护其数据属性的完整描述。理论上这可以通过检查依赖图来手动完成,但是这个图可能会变得很深,并且有很多模块,我会不断地更改和添加,而且......我太懒了,也太粗心了,无法手动完成.
因此,程序通过跟踪对其他类属性的调用并通过托管的调用堆栈将它们的形状推回调用者来动态发现数据 atts 的完整形状__get__
。当我重写时,我发现我需要严格控制对构建器类的属性访问,以防止任意信息影响数据 atts。幸运的是,python 使用描述符使这变得容易。
我将数据 atts 的形状存储在数据库中,以便我可以查询是否已经存在适当的数据(即其形状是当前参数状态的子集)。在我的重写中,我通过出色的 SQLAlchemy 从 mysql 转移到对象 db(ZODB 或 couchdb?),因为当发现额外的 def_specs 时,必须更改每个类的表,这很痛苦,因为一些 def_specs 是python 列表或字典,很难翻译成 sql。
由于需要严格的属性控制,我不认为这种数据管理可以与我的数据转换代码分开,尽管我正在尽可能地这样做。我可以使用现有的类,用一个类包装它们,该类提供它们的 def_specs 作为类属性,并通过描述符进行数据库管理,但是这些类是终端的,因为无法进一步发现额外的依赖形状。
如果数据管理不能轻易地与数据构建分开,我想不可能有一个开箱即用的解决方案,而是一千个特定的解决方案。也许有一个适用的模式?我会很感激任何关于如何去寻找或更好地描述问题的提示。对我来说,这似乎是一个普遍的问题,尽管管理深度分层的数据可能与网络的盛行不符。
version-control - 如何标记科学数据处理工具以确保可重复性
我们开发了一种数据处理工具,可以从一组给定的原始数据中提取一些科学结果。在数据科学中,您可以重新获得结果并重复计算,这会产生结果集,这一点非常重要
由于该工具正在发展,我们需要一种方法来找出我们工具的哪个修订/构建生成了给定的结果集,以及如何找到构建该工具的相应源。
该工具是用 C++ 和 Python 编写的;使用 Boost::Python 将 C++ 部分粘合在一起。我们使用 CMake 作为构建系统,为 Linux 生成 Make 文件。目前该项目存储在 subversion repo 中,但我们中的一些人已经使用 git resp。hg,我们计划在不久的将来将整个项目迁移到其中之一。
在这种情况下,获得源代码、二进制文件和结果集之间唯一映射的最佳实践是什么?
我们已经在讨论的想法:
- 以某种方式注入全局修订号
- 使用内部版本号生成器
- 将整个源代码存储在可执行文件本身中
programming-languages - 为什么 PL/我没有在科学计算中成功?
PL/I 是一门非常古老的语言,但在科学计算方面似乎没有像 Fortran 那样得到太多的宣传和赞赏。这是为什么?在网络上搜索确实显示有许多用于科学计算的 PL/I 代码。其中有一个由 IBM 在 PL/I 中开发的科学计算库。
但是我还没有找到任何适用于 PL/I 的免费 Windows 编译器。是不是因为缺乏免费的编译器,PL/I 没有吸引到科学界?
非常感谢...
matlab - Ada:与 Matlab 接口
由于 Ada 没有任何好的科学计算库,我想知道是否有人能够在 Ada 中使用 Matlab 数学函数,例如 eig(用于计算特征值和特征向量)。
我看到 simulink 和 Ada 存在一些接口。但我不是 Simulink 的用户。我希望能够通过 Ada 函数和程序来使用 Matlab 数学函数。
PS:在早期的 Ada 文档中,有很多讨论和承诺要创建类似于 NAG 或 NUMAL 的良好数值库。我确实想知道为什么这从未成功地具体化,并且任何好的和强大的科学计算库都可用。在我看来,Ada 语言肯定不会比任何其他科学计算语言都逊色。
非常感谢...
database - 可扩展、快速、文本文件支持的数据库引擎?
我正在处理存储在制表符分隔.tsv
文件中的大量科学数据。要执行的典型操作是读取几个大文件,仅过滤掉某些列/行,与其他数据源连接,添加计算值并将结果写入另一个 .tsv。
纯文本因其健壮性、寿命和自记录特性而被使用。以另一种格式存储数据不是一种选择,它必须保持开放且易于处理。数据量很大(几十 TB),将副本加载到关系数据库中是负担不起的(我们将不得不购买两倍的存储空间)。
由于我主要进行选择和连接,我意识到我基本上需要一个带有基于 .tsv 的后备存储的数据库引擎。我不关心事务,因为我的数据都是一次写入多次读取。我需要就地处理数据,而不需要主要的转换步骤和数据克隆。
由于要以这种方式查询大量数据,我需要有效地处理它,利用缓存和计算机网格。
有谁知道一个系统可以提供类似数据库的功能,同时使用普通的制表符分隔文件作为后端?在我看来,这似乎是一个非常普遍的问题,几乎所有科学家都以一种或另一种方式处理。
unit-testing - 如何测试科学软件?
我坚信软件测试确实非常重要,尤其是在科学领域。然而,在过去的 6 年里,我从未遇到过任何定期测试的科学软件项目(其中大多数甚至没有版本控制)。
现在我想知道您如何处理科学代码(数值计算)的软件测试。
从我的角度来看,标准单元测试经常忽略这一点,因为没有确切的结果,所以assert(a == b)
由于“正常”的数字错误,使用可能会有点困难。
因此,我期待着阅读您对此的看法。