我正在实现一个LinearTransformation类,它继承numpy.matrix并用于numpy.matrix.I计算变换矩阵的逆.
有没有人知道在尝试计算逆矩阵之前numpy是否检查矩阵的正交性?我问,因为我的大多数矩阵(但不是全部)都是正交的,我想知道在尝试反转之前是否要执行一些快速正交性检查.
我必须编写一个可以由 C 和 Fortran 调用的子例程。该子例程将文件名作为其参数之一。我知道为了与 C 良好地互操作,ISO C 绑定建议使用字符数组进行互操作。
我的问题是:是否存在易于编写的字符数组文字之类的东西?我有一个这样的子程序:
subroutine my_sub(char_array)
use iso_c_binding, only: c_char
char(kind=c_char, len=1), dimension(:), intent(in) :: char_array
...
end subroutine my_sub
Run Code Online (Sandbox Code Playgroud)
是否可以通过以下方式调用它:
call my_sub('Hello World!')
Run Code Online (Sandbox Code Playgroud)
或者我必须做一些可怕的事情,比如:
call my_sub((/ 'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!' /))
Run Code Online (Sandbox Code Playgroud)
我的主要问题似乎是它不喜欢假定形状的数组,并且给它一个设定的(大)大小也会输出随后拾取的所有垃圾内存。
有更好的方法吗?
我根据它们的一个属性对一些对象进行排序,使用类似这样的东西:
sorted_list = sorted(unsorted_list, key=lambda x: x.my_attr)
Run Code Online (Sandbox Code Playgroud)
有没有办法对这些对象的列表列表进行排序,就像Python可以对整数列表列表进行排序一样?我可以__cmp__(self, other)为这些对象重载,但这会在外部包中引发困难.嵌套也可能变得任意深,所以我认为我不能只使用列表理解.
我想知道是否有什么东西我可以生成my_attrs的列表并将其链接到相应的对象列表.我想不出一个好的方法来做到这一点.
我们使用" 成功的Git分支模型 " 在GitHub上托管了一个git repo .
为了保护master和dev分支,我们有一对CODEOWNERS文件.要掌握的PR需要用户A的批准,而PR需要用户A,B或C的批准.
我不知道如何处理CODEOWNERS文件的版本控制.理想情况下,我们希望它们保持静态,但是,由于CODEOWNERS文件不同,在dev或master之间启动PR导致合并冲突.
我是否可以设置分支历史记录,以便master/dev不会尝试同步CODEOWNERS文件?我需要做些什么?
我是repo管理员,因此可以暂时禁用master/dev上的PR要求.
我在Fortran和C之间传递字符串时遇到问题。
Fortran子例程调用如下所示:
CALL MMEINITWRAPPER(TRIM(ADJUSTL(PRMTOP)), 0, SALTCON, RGBMAX, CUT)
Run Code Online (Sandbox Code Playgroud)
与之配合使用的C具有签名:
int mmeinitwrapper_(char *name,
int *igb,
REAL_T *saltcon,
REAL_T *rgbmax1,
REAL_T *cutoff1)
Run Code Online (Sandbox Code Playgroud)
我在不同的地方放了一些打印语句,然后一切正常,直到使用ifort编译为止。在这种情况下,输出如下所示:
Topology file name:
coords.prmtop
coords.prmtop
Topology file name length: 81 13
length in C: 8
read argument: coords.prmtop??*
Reading parm file (coords.prmtop??*)
coords.prmtop??*, coords.prmtop??*.Z: does not exist
Cannot read parm file coords.prmtop??*
Run Code Online (Sandbox Code Playgroud)
使用波特兰编译器:
Topology file name:
coords.prmtop
coords.prmtop
Topology file name length: 81 13
length in C: 8
read argument: coords.prmtop
Reading parm file (coords.prmtop)
Run Code Online (Sandbox Code Playgroud)
第一组中的长度来自未修剪/未调节弦的Fortran,然后来自修剪/已调节弦。C中的长度为sizeof(name)/sizeof(name[0])。
似乎正在传递一段过长的内存,并且在随后的运行中,您会写入不同长度的不良内容(尽管C中报告的长度始终为8)。 …
给定一个 ELF 二进制文件或共享对象,我如何才能最轻松地查看所需共享库的加载顺序?
它们是否按照列出的顺序加载readelf -d?
我在访问C中的数组时遇到了segfaults的问题,这个数组是在下面的Fortran文件中分配的.有一些调试的假象,例如文件写入没有写任何有意义的事实,我初始化一个i我从不使用的变量.
但是,我发现了以下内容:
i(但仍然声明):没有段错误HESS(不HESS_COPY):没有段错误i使用不同的名称声明和初始化:segfault有谁知道什么可能会引起这种行为?段错误本身就出现在该行ARRAY_PTR = C_LOC(HESS_COPY(1, 1)).我正在编译使用gfortran和gcc调试标志(没有优化).
valgrind 说有一个无效的写(前两个文件是我在下面显示的文件):
Invalid write of size 8
at 0xBEEA3E: get_pointer (modsparsehess.f90:34)
by 0xA75D7A: print_hess (sparse_hessian_c.c:108)
by 0x866C95: quench_ (quench.f:316)
by 0x7F2DBE: mc_ (mc.F:368)
by 0x4B65E2: mcruns_ (mcruns.f:62)
by 0x459245: MAIN__ (main.F:430)
by 0x45A33F: main (main.F:21)
Address 0x87 is not stack'd, malloc'd or (recently) free'd
Run Code Online (Sandbox Code Playgroud)
C档
#include <stdio.h>
void get_pointer(double ** hessian);
void print_hess(int *arr_size) { …Run Code Online (Sandbox Code Playgroud) 我对 Rust 特征很陌生,所以这可能是由于对超级特征或dyn其他任何东西的误解。我试图在枚举中使用特征对象来:
Copy最小的示例(无法在Rust 游乐场上编译并出现相关错误)是:
#[derive(Copy)]
enum Foo {
A,
B(dyn MyTraitWhichIsCopy),
}
trait MyTraitWhichIsCopy: Copy {}
Run Code Online (Sandbox Code Playgroud)
错误是:
error[E0204]: the trait `Copy` may not be implemented for this type
--> src/lib.rs:1:10
|
1 | #[derive(Copy)]
| ^^^^
...
4 | B(dyn MyTraitWhichIsCopy),
| ---------------------- this field does not implement `Copy`
|
= note: this error originates in a derive macro (in Nightly builds, run with -Z macro-backtrace for more info)
error: aborting due …Run Code Online (Sandbox Code Playgroud) 我正在尝试生成一个列表来索引坐标(x,y和z),给定一组原子索引.我的问题很简单,如何优雅地从这个列表:
atom_indices = [0, 4, 5, 8]
Run Code Online (Sandbox Code Playgroud)
到此列表:
coord_indices = [0, 1, 2, 12, 13, 14, 15, 16, 17, 24, 25, 26]
Run Code Online (Sandbox Code Playgroud)
到目前为止,我最简单的阅读/理解方式是:
coord_indices = []
for atom in atom_indices:
coord_indices += [3 * atom,
3 * atom + 1,
3 * atom + 2]
Run Code Online (Sandbox Code Playgroud)
但这似乎不是Pythonic.如果没有列表列表或元组列表,有没有更好的方法?