问题标签 [scientific-software]

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.

0 投票
1 回答
1459 浏览

python - 如何在pyqtgraph中对齐文本小部件的中心

我想使用 textwidget 在图像上显示文本,并确保文本在图像中居中。(我实际上想制作一部电影,其中文本随每一帧而变化,以指示发生了什么变化)。

我尝试了以下方法(在 jupyter 笔记本中):

但是,这会导致文本标签不居中,因为左角当前位于中心。如何在图像中心获得文本的中心?我的数据大小以及文本小部件中的文本可能会发生变化,因此我正在寻找一种比反复试验更聪明的方法。我查看了 setAnchor 方法,但它只指定了角。

问候,德克

0 投票
0 回答
58 浏览

precision - 将浮点数列表相乘以在现代 CPU 上保持最大精度

我有许多单精度 IEEE 浮点数的列表。如何遍历列表并将所有数字相乘以确保最大精度,并且没有上溢/下溢?我们假设不应该有任意精度乘法的上溢/下溢,然后截断为浮点数。

是否可以在不实际乘以数字的情况下查看浮点列表并找出最佳顺序,或者我们必须开始乘以,然后才尝试找到我们应该乘以的下一个数字以保持最大精度,在一种反馈中(下一步搜索)算法?我们可以限制自己基于遍历列表并仅添加指数进行排序吗?

对于 i 均匀分布的浮点数,其尾数为 m 位,指数为 n 位,其中一个 cpu 将乘法结果存储在一个具有 r 位尾数和 s 位指数的寄存器中,然后在读取时截断回 m+n,假设以任意精度将这些数字相乘并截断为原始 m+n 位格式不会产生上溢/下溢,那么与有限 r+s 位寄存器相乘不会产生溢出的可能性有多大?在没有溢出的情况下,根据 i、n、m、r 和 s,我可以从这个操作中获得什么样的精度?

对于浮点数、双精度数和各种常见的寄存器大小,对于小、中、大和非常大的 i,一个很好的部分答案就是回答这个问题。

0 投票
0 回答
42 浏览

singularity-container - 奇点容器:如何在设置中对源代码进行重大更改?

目的是创建一个与Feynhiggs / Higgsbounds / HiggsSignal / 2HDMC / SusHi和平运行的奇点容器。它们是一个强大的组合,但设置起来很繁琐。我希望能够提供这个容器来复制我的结果。

为了做到这一点,需要几个黑客。比如 2HDMC 大部分需要 Higgsbounds 版本 5,但也使用了 HiggsBounds 版本 4 中的一个 legacy 函数,所以我会在编译 HiggsBounds 5 之前将 legacy 函数插入到 HiggsBounds 5 的源代码中。2HDMC 不再维护,但它仍然是唯一能满足我需求的程序。这只是一个例子,几乎所有的包都需要更改源才能合作,尽管它们都打算一起使用。

原则上,我可以将所有这些更改作为替换写入奇点配方sed,但这可能会创建一个完全不可读的配方文件。或者,我可以构建所有需要更改的文件的 zip,然后用配方替换它们,我认为这会更整洁,但我从未见过这样做。这也可以从改变所在的配方中清楚地看出。

在奇点编译之前是否有破解源代码的标准做法?

0 投票
1 回答
2955 浏览

python - Python 子进程:提供标准输入,读取标准输出,然后提供更多标准输入

我正在使用一款名为 Chimera 的科学软件。对于这个问题的一些下游代码,它要求我使用 Python 2.7。

我想调用一个进程,给那个进程一些输入,读取它的输出,基于它给它更多的输入,等等。

我习惯于Popen打开进程,process.stdin.write传递标准输入,但是当进程仍在运行时,我一直试图获取输出。process.communicate()停止这个过程,process.stdout.readline()似乎让我陷入无限循环。


这是我想做的一个简化示例:

假设我有一个名为exampleInput.sh.

通过命令行与之交互,我会运行脚本,输入“5”,然后,如果它返回“25”,我会输入“yes”,如果不是,我会输入“no”。

我想运行一个 python 脚本,我传递exampleInput.sh“5”,如果它给我“25”,那么我传递“是”

到目前为止,这是我能得到的最接近的:

但这当然失败了,因为在“process.communicate()”之后,我的进程不再运行了。


(以防万一/仅供参考):实际问题

Chimera 通常是一个基于 gui 的应用程序来检查蛋白质结构。如果你运行chimera --nogui,它会打开一个提示并接受输入。

在运行下一个命令之前,我经常需要知道嵌合体输出什么。例如,我经常会尝试生成蛋白质表面,如果 Chimera 无法生成表面,它不会破裂——它只是通过 STDOUT 这么说的。因此,在我的 python 脚本中,当我循环分析许多蛋白质时,我需要检查 STDOUT 以了解是否继续对该蛋白质进行分析。

在其他用例中,我将首先通过 Chimera 运行大量命令来清理蛋白质,然后我会想运行大量单独的命令来获取不同的数据,并使用这些数据来决定是否运行其他命令。我可以获取数据,关闭子进程,然后运行另一个进程,但这需要每次都重新运行所有这些清理命令。

无论如何,这些是我希望能够将 STDIN 推送到子进程、读取 STDOUT 并且仍然能够推送更多 STDIN 的一些实际原因。

谢谢你的时间!

0 投票
1 回答
766 浏览

excel - Excel 中的药代动力学 - 如何计算多种药物摄入量?

尽管听起来很痛苦,但我的任务是实施一个电子表格来计算药物吸收和消除半衰期。我实际上使用 LibreOffice Calc,但在 Excel 中测试的解决方案也会对我有所帮助(因为它可能是可移植的,无论如何)。

我的电子表格目前如下所示:

在此处输入图像描述

它必须考虑多剂量摄入(即 D 列中的任意新条目)。例如,要使用此电子表格的人需要每 56 小时服用一次新的 50mg 剂量的药物。

为了在 C 列上编写一个工作公式,我遵循了许多步骤:(
所有示例均针对 C3;C2 手动设置为0

  1. = ( C2 * 0,5 ^ ( (B3 - B2) / $H$3 ) ) + D2 * J$2- 这确实考虑了多剂量摄入,但不考虑吸收时间。相反,它会50在 C3 (8 小时后)48.577C4 (16 小时)、(...)和25.000C27 (192 小时或 1 个半衰期)等上返回。换句话说,血液中的药物浓度立即上升。相反,它应该线性上升,根据H2 中的“达到 C max的时间”。

  2. = IFERROR( ( ( INDEX( $D$2:$D2; MATCH(1E+306; $D$2:$D2; 1) ) * J$2 ) * MIN( ( B3 - ( INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) ) / $H$2; 1 ) ); 0 )- 这计算了随着时间的50吸收,它线性上升,直到达到C16 (112 小时),然后保持在那里。它与前面的公式不同,因为这个公式查找在 D 列中输入的最后一个值(结合了 INDEX 和 MATCH)。但是,正因为如此,它不再占多个摄入量 - 只有最后一个。

  3. = IFERROR( ( ( ( INDEX( $D$2:$D2; MATCH(1E+306; $D$2:$D2; 1) ) * J$2 ) * MIN( ( B3 - ( INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) ) / $H$2; 1 ) ) - ( ( INDEX( $D$2:$D2; MATCH(1E+306; $D$2:$D2; 1) ) * J$2 ) * MIN( ( B2 - ( INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) ) / $H$2; 1 ) ) ); 0 )- 这将返回在过去 8 小时(1 行)期间吸收的药物量。即,C3 是3.704,C4 也是3.704,(...) C15 (104 小时)也是3.704,而 C16 (112 小时)1.852,C17 及以下是0(假设除了 D2 之外没有其他剂量摄入)。它与前面的公式有相同的缺点。

  4. = ( C2 * 0,5 ^ ( (B3 - B2) / $H$3 ) ) + IFERROR( ( ( ( INDEX( $D$2:$D2; MATCH(1E+306; $D$2:$D2; 1) ) * J$2 ) * MIN( ( B3 - ( INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) ) / $H$2; 1 ) ) - ( ( INDEX( $D$2:$D2; MATCH(1E+306; $D$2:$D2; 1) ) * J$2 ) * MIN( ( B2 - ( INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) ) / $H$2; 1 ) ) ); 0 )- 这是我目前 先进的公式。它说明了吸收量的线性吸收和对数消除。

  5. 2019 年 10 月 11 日更新:我对上面的第 3 步提出了性能改进,形式为:= IFERROR( ( ( IF( ( B3 - INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) <= H$2; (B3 - B2); IF( ( ( B3 - INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) - H$2 ) < (B3 - B2); ( ( B3 - INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) - H$2 ); 0 ) ) * INDEX( $D$2:$D2; MATCH(1E+306; $D$2:$D2; 1) ) ) / H$2 ); 0 ).

    如上面的屏幕截图所示,更新后的完整公式和当前的最新技术= ( C2 * 0,5 ^ ( (B3 - B2) / $H$3 ) ) + IFERROR( ( ( IF( ( B3 - INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) <= H$2; (B3 - B2); IF( ( ( B3 - INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) - H$2 ) < (B3 - B2); ( ( B3 - INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) - H$2 ); 0 ) ) * INDEX( $D$2:$D2; MATCH(1E+306; $D$2:$D2; 1) ) ) / H$2 ); 0 )是:

然而,这个公式仍然没有考虑到后续的剂量摄入,无论如何都不正确。即,如果我50在单元格 D9 中输入新值,则单元格 C10 中的值应该增加,但不会增加。
经过深思熟虑并在其他地方寻求帮助后,我仍然不知道它是如何做到的。

任何人都可以帮忙吗?


作为附加上下文,本例中的药物是环戊丙酸睾酮 (TC),作为肌肉注射给药,“T / TC 比率”是指 TC 上存在的睾酮 (T) 的比率,我真的不知道知道该比率是否实际上是 1。“达到 C最大值的时间”是药物达到血液中最大浓度所需的时间。

有人告诉我吸收可能不是完全线性的,当达到 C max时,药物可能不会 100% 被吸收,这意味着之后会继续吸收一些药物;尽管如此,我可以假设它是线性的,并且在 C max处 100% 被吸收,因为对于将要使用电子表格的人来说,这是一个足够好的近似值。

我将电子表格放在 Google 云端硬盘上,以便其他人更轻松地为我提供帮助。

谢谢。

0 投票
1 回答
1178 浏览

python - Pycharm python-snowflake 连接器包适用于所有其他项目,除了在科学模式项目中未找到

我需要帮助让 Snowflake-Python 连接器包在 Pycharm科学模式下工作项目中工作。

当我之前在非科学模式项目中设置 Snowflake-Python 连接器时,我可以简单地从 Project Intepreter -available packages 屏幕中选择它(参见屏幕截图 1)

然而,对于科学模式项目,连接器根本不会出现在可用项目屏幕中(屏幕截图 2)

当我查看文档时,我发现了这套科学模式雪花蟒连接器的说明。 https://www.jetbrains.com/help/pycharm/connecting-to-a-database.html

我执行了所有这些步骤,但是当我运行项目时,我得到了这些错误(“没有名为雪花的模块”):感谢任何帮助解决这个问题!

在此处输入图像描述

在此处输入图像描述

0 投票
0 回答
156 浏览

python-3.x - 如何处理 scipy odeint 中的无限导数?

我有一个耦合 ODE 系统,我试图使用scipy.integrate.odeint. 但是,每次我运行时odeint,我都会收到错误消息

我很确定我知道这其中的原因。在错误发生的地方,我的一个导数的值变为无穷大。但是,这在我试图解决的问题中是不可避免的。我想知道是否有办法让 odeint 在达到这个无穷大时以更文明的方式表现,而不是仅仅拒绝工作并产生无意义的输出(如图所示)scipy getting wrong

提前干杯!

0 投票
0 回答
38 浏览

bioinformatics - 提取 PDB 文件中的绑定数据

拉出 PDB 绑定数据

我想提取 PDB 文件中的残基和 hetatom 坐标,并对接触残基进行评估。

然后我想将这些残基与比对进行比较。如果这些残基在 alignmet 中是保守的,则为这些残基加星标。这样做的原因是我在多对多对齐上有 15,000 行初始“命中”。

有人可以为我指出正确的阅读方向吗?

0 投票
1 回答
62 浏览

math - 在 GNU Scientific Library 多根查找器中选择起点

我正在使用 GNU Scientific Library 的多根查找器的实现来求解以下非线性方程组中的未知数 (x和):y

在此处输入图像描述

但是,我对“起点”有点困惑:

Solve(const double *x, int maxIter = 0, double absTol = 0, double relTol = 0) 从点 X 开始求根;如果给定,则使用迭代次数和容差,否则使用可以由静态方法 SetDefault 定义的默认参数值

起点如何选择?

0 投票
1 回答
623 浏览

c++ - 如何编写代码来计算 C++ 中几个变量函数的偏导数?

我已经编写了代码,通过创建一个名为“Der”的类来计算单个变量函数的导数。在class Der中,我定义了两个私有变量double fanddouble df和一个print()函数来打印fand的值df。在类中,我重载了运算符+, -, *, /, ^ 来计算函数的和、差、乘等的导数。我不能展示整个代码,因为它很长,但我会展示一些片段来给出一个想法。

现在我想用这个导数计算器来计算几个变量函数的偏导数,并最终计算出该函数的梯度。我有一些模糊的想法,但我无法在代码中实现它。我是 C++ 编程的初学者,所以如果你不使用太多高级概念会很有帮助。

任何形式的帮助将不胜感激。谢谢!

编辑:我已经添加了如何Der使用。该程序应该接受自变量的输入,例如x(2), y(4), z(5)和函数f(x,y,z)=x^2*y*z+log(x*y*z)。然后,它将以数组的形式给出fwrtx, y, z在 point 处的偏导数。(2, 4, 5)但是,我只需要一些关于如何编写偏导数计算器的想法。