问题标签 [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.
python - 如何在pyqtgraph中对齐文本小部件的中心
我想使用 textwidget 在图像上显示文本,并确保文本在图像中居中。(我实际上想制作一部电影,其中文本随每一帧而变化,以指示发生了什么变化)。
我尝试了以下方法(在 jupyter 笔记本中):
但是,这会导致文本标签不居中,因为左角当前位于中心。如何在图像中心获得文本的中心?我的数据大小以及文本小部件中的文本可能会发生变化,因此我正在寻找一种比反复试验更聪明的方法。我查看了 setAnchor 方法,但它只指定了角。
问候,德克
precision - 将浮点数列表相乘以在现代 CPU 上保持最大精度
我有许多单精度 IEEE 浮点数的列表。如何遍历列表并将所有数字相乘以确保最大精度,并且没有上溢/下溢?我们假设不应该有任意精度乘法的上溢/下溢,然后截断为浮点数。
是否可以在不实际乘以数字的情况下查看浮点列表并找出最佳顺序,或者我们必须开始乘以,然后才尝试找到我们应该乘以的下一个数字以保持最大精度,在一种反馈中(下一步搜索)算法?我们可以限制自己基于遍历列表并仅添加指数进行排序吗?
对于 i 均匀分布的浮点数,其尾数为 m 位,指数为 n 位,其中一个 cpu 将乘法结果存储在一个具有 r 位尾数和 s 位指数的寄存器中,然后在读取时截断回 m+n,假设以任意精度将这些数字相乘并截断为原始 m+n 位格式不会产生上溢/下溢,那么与有限 r+s 位寄存器相乘不会产生溢出的可能性有多大?在没有溢出的情况下,根据 i、n、m、r 和 s,我可以从这个操作中获得什么样的精度?
对于浮点数、双精度数和各种常见的寄存器大小,对于小、中、大和非常大的 i,一个很好的部分答案就是回答这个问题。
singularity-container - 奇点容器:如何在设置中对源代码进行重大更改?
目的是创建一个与Feynhiggs / Higgsbounds / HiggsSignal / 2HDMC / SusHi和平运行的奇点容器。它们是一个强大的组合,但设置起来很繁琐。我希望能够提供这个容器来复制我的结果。
为了做到这一点,需要几个黑客。比如 2HDMC 大部分需要 Higgsbounds 版本 5,但也使用了 HiggsBounds 版本 4 中的一个 legacy 函数,所以我会在编译 HiggsBounds 5 之前将 legacy 函数插入到 HiggsBounds 5 的源代码中。2HDMC 不再维护,但它仍然是唯一能满足我需求的程序。这只是一个例子,几乎所有的包都需要更改源才能合作,尽管它们都打算一起使用。
原则上,我可以将所有这些更改作为替换写入奇点配方sed
,但这可能会创建一个完全不可读的配方文件。或者,我可以构建所有需要更改的文件的 zip,然后用配方替换它们,我认为这会更整洁,但我从未见过这样做。这也可以从改变所在的配方中清楚地看出。
在奇点编译之前是否有破解源代码的标准做法?
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 的一些实际原因。
谢谢你的时间!
excel - Excel 中的药代动力学 - 如何计算多种药物摄入量?
尽管听起来很痛苦,但我的任务是实施一个电子表格来计算药物吸收和消除半衰期。我实际上使用 LibreOffice Calc,但在 Excel 中测试的解决方案也会对我有所帮助(因为它可能是可移植的,无论如何)。
我的电子表格目前如下所示:
它必须考虑多剂量摄入(即 D 列中的任意新条目)。例如,要使用此电子表格的人需要每 56 小时服用一次新的 50mg 剂量的药物。
为了在 C 列上编写一个工作公式,我遵循了许多步骤:(
所有示例均针对 C3;C2 手动设置为0
)
= ( C2 * 0,5 ^ ( (B3 - B2) / $H$3 ) ) + D2 * J$2
- 这确实考虑了多剂量摄入,但不考虑吸收时间。相反,它会50
在 C3 (8 小时后)、48.577
C4 (16 小时)、(...)和25.000
C27 (192 小时或 1 个半衰期)等上返回。换句话说,血液中的药物浓度立即上升。相反,它应该线性上升,根据H2 中的“达到 C max的时间”。= 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)。但是,正因为如此,它不再占多个摄入量 - 只有最后一个。= 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 之外没有其他剂量摄入)。它与前面的公式有相同的缺点。= ( 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 )
- 这是我目前最先进的公式。它说明了吸收量的线性吸收和对数消除。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 云端硬盘上,以便其他人更轻松地为我提供帮助。
谢谢。
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
我执行了所有这些步骤,但是当我运行项目时,我得到了这些错误(“没有名为雪花的模块”):感谢任何帮助解决这个问题!
python-3.x - 如何处理 scipy odeint 中的无限导数?
我有一个耦合 ODE 系统,我试图使用scipy.integrate.odeint
. 但是,每次我运行时odeint
,我都会收到错误消息
我很确定我知道这其中的原因。在错误发生的地方,我的一个导数的值变为无穷大。但是,这在我试图解决的问题中是不可避免的。我想知道是否有办法让 odeint 在达到这个无穷大时以更文明的方式表现,而不是仅仅拒绝工作并产生无意义的输出(如图所示)scipy getting wrong。
提前干杯!
bioinformatics - 提取 PDB 文件中的绑定数据
拉出 PDB 绑定数据
我想提取 PDB 文件中的残基和 hetatom 坐标,并对接触残基进行评估。
然后我想将这些残基与比对进行比较。如果这些残基在 alignmet 中是保守的,则为这些残基加星标。这样做的原因是我在多对多对齐上有 15,000 行初始“命中”。
有人可以为我指出正确的阅读方向吗?
c++ - 如何编写代码来计算 C++ 中几个变量函数的偏导数?
我已经编写了代码,通过创建一个名为“Der”的类来计算单个变量函数的导数。在class Der
中,我定义了两个私有变量double f
anddouble df
和一个print()
函数来打印f
and的值df
。在类中,我重载了运算符+, -, *, /, ^
来计算函数的和、差、乘等的导数。我不能展示整个代码,因为它很长,但我会展示一些片段来给出一个想法。
现在我想用这个导数计算器来计算几个变量函数的偏导数,并最终计算出该函数的梯度。我有一些模糊的想法,但我无法在代码中实现它。我是 C++ 编程的初学者,所以如果你不使用太多高级概念会很有帮助。
任何形式的帮助将不胜感激。谢谢!
编辑:我已经添加了如何Der
使用。该程序应该接受自变量的输入,例如x(2), y(4), z(5)
和函数f(x,y,z)=x^2*y*z+log(x*y*z)
。然后,它将以数组的形式给出f
wrtx, y, z
在 point 处的偏导数。(2, 4, 5)
但是,我只需要一些关于如何编写偏导数计算器的想法。