这只是为了我自己的启发.我正在学习python并且已经使用python进入OOP.我见过的类中每个方法的例子都有"self"作为第一个参数.所有方法都是如此吗?如果确实如此,那么python是否已被编写,以至于这个参数只是被理解,因此不需要?谢谢.
我有FORTRAN代码的二进制输出文件.想在python中阅读它.(使用FORTRAN读取并输出文本以读取python不是一个选项.长篇故事.)我可以以简单的方式阅读第一条记录:
>>> binfile=open('myfile','rb')
>>> pad1=struct.unpack('i',binfile.read(4))[0]
>>> ver=struct.unpack('d',binfile.read(8))[0]
>>> pad2=struct.unpack('i',binfile.read(4))[0]
>>> pad1,ver,pad2
(8,3.13,8)
Run Code Online (Sandbox Code Playgroud)
正好.但这是一个大文件,我需要更有效地做到这一点.所以我尝试:
>>> (pad1,ver,pad2)=struct.unpack('idi',binfile.read(16))
Run Code Online (Sandbox Code Playgroud)
这不会运行.给我一个错误并告诉我解压缩需要一个长度为20的参数.这对我来说没有任何意义,因为我上次检查时,4 + 8 + 4 = 16.当我输入并用16替换16时,它会运行,但这三个数字都填充了数字垃圾.有谁看到我做错了什么?谢谢!
我对以下行为感到惊讶:
>>> a=['a','b','c','d','e','f','g']
>>> en=enumerate(a)
>>> list(en)
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e'), (5, 'f'), (6, 'g')]
>>> list(en)
[]
>>> # en changed? let's try that again!
>>> a=['a','b','c','d','e','f','g']
>>> en=enumerate(a)
>>> tuple(en)
((0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e'), (5, 'f'), (6, 'g'))
>>> tuple(en)
()
>>> # en changes again?
Run Code Online (Sandbox Code Playgroud)
我假设list()只是从en中的数据构建一个列表,并且不会以任何方式改变它.同样的tuple().但他们都以"深刻"的方式影响恩.我误解一些关于list()和tuple(),或我误解enumerate()?谢谢.
我需要拟合一个函数
z(u,v) = C u v^p
Run Code Online (Sandbox Code Playgroud)
也就是说,我有一个二维数据集,我要找到两个参数,C和p。numpy 或 scipy 中是否有可以直接执行此操作的内容?我查看了 scipy.optimize.leastsq,但我不清楚我将如何在这里使用它。
我在MPI中运行Fortran代码.我需要在一个特定的进程中设置一个环境变量.有没有办法做到这一点?从Fortran代码调用"system"似乎没有效果.我通过"aprun"运行代码.
foo我在分支中有一个文件master。它需要一些工作,所以我创建了bar我做一些工作的分支。事情看起来令人满意,所以我准备重新合并到master. 只有一个问题:我想保留在分支中所做的所有更改bar以供将来参考,但并非所有更改都属于master,至少现在不行。但是如果我进行通常的合并,git 将不会看到任何冲突——因为文件foo尚未master被编辑——并且只会进行合并。有没有办法强制 git 进行此合并,就好像我需要解决冲突一样?或者是否有其他方法可以仅将选定的更改bar放入master?
在我看来,这个 Fortran MPI 程序非常简单:
program what
use mpi
integer(4), parameter :: ksp = 4
integer(4), parameter :: kdp = 8
integer(ksp) :: nreadslb
integer(ksp), ALLOCATABLE :: all_nreadslb(:)
real(kdp) :: compute_time
real(kdp), ALLOCATABLE :: all_compute_times(:)
integer(ksp) :: myrank
integer :: ierr
call mpi_init(ierr)
allocate(all_nreadslb(10), all_compute_times(10))
CALL MPI_GATHER(compute_time, 1, &
MPI_DOUBLE_PRECISION, all_compute_times, 1, &
MPI_DOUBLE_PRECISION, 0, MPI_COMM_WORLD, ierr)
CALL MPI_GATHER(nreadslb, 1, MPI_INTEGER4, &
all_nreadslb, 1, MPI_INTEGER4, 0, &
MPI_COMM_WORLD, ierr)
call mpi_finalize(ierr)
end program
Run Code Online (Sandbox Code Playgroud)
但它无法在 GNU 下的 Cray 平台上编译。返回的错误是:
23 | CALL …Run Code Online (Sandbox Code Playgroud) 这段代码片段:
real*8 a(20,5,2)
real*8 b(5)
real*8 c(20,5,2)
! define a vals ....
! define b vals ....
c(1:20, :, 1:2) = a(1:20,:,1:2)*b
Run Code Online (Sandbox Code Playgroud)
将无法编译,因为b它的形状与aor不同c.我当然想的五个值b以匹配中间指数的5个值a和c,但Fortran编译器不明白这一点.有没有办法告诉它我想要什么?我知道我可以复制b在更大的阵列相匹配的形状a和c但浪费内存.我也可以将整个事情放在循环中但是对于我想写的实际代码来说这将是麻烦的.还有其他可能性吗?
我想从一个 RGB 颜色列表开始,然后从它们构建一个我可以在seaborn绘图中使用的颜色图。我找到了一些关于如何更改默认颜色映射的说明,但这不是我要找的。我想构建一个颜色图,我可以在命令的cmap参数中使用它kdeplot。
我正在开发一个类。它将需要的类级数据将相对复杂。为了节省打字和减少错误,我想通过函数定义一些这些数据。此外,我想让用户可以使用这些数据,即使他们还没有准备好实例化该类。所以,我想知道,有没有办法让这些函数在定义类后立即自动运行?例如,我想要类似的东西
import numpy as np
def class foo:
@this_should_run_before_instantiation
def define_bar:
bar = np.range(100)
@this_should_also_run_before_init
def define_something_really complicated:
bleh = # something that is too complicated for a single line or lambda
def __init__(self):
# etc.
Run Code Online (Sandbox Code Playgroud)
那么用户可以做类似的事情
>>>from foopackage import foo
>>>foo.bar
array([ 0, 1, 2, 3, 4, 5, ... #etc.
>>>foo.bleh
< whatever bleh is ... >
Run Code Online (Sandbox Code Playgroud)