小编Gre*_*reg的帖子

Python在2D网格上插值点值

我有一个常规的2D X,Y和Z数组,我有一个点X0和Y0,我想知道我的网格上的点(X0,Y0)中的Z0值.

我发现scipy有插值模块,但据我所知它插入1D/2D数组并返回1D/2D数组,但是没有方法只能在一个点返回一个值.

例如:

#My grid data
X = [ [X11, X12, X13, ..., X1N], 
      [X21, X22, X23, ..., X2N],
          ....
      [XN1, XN2, XN3, ..., XNN]

Y = [ [Y11, Y12, Y13, ..., Y1N], 
      [Y21, Y22, Y23, ..., Y2N],
          ....
      [YN1, YN2, YN3, ..., YNN] ]

Z = [ [Z11, Z12, Z13, ..., Z1N], 
      [Z21, Z22, Z23, ..., Z2N],
          ....
      [ZN1, ZN2, ZN3, ..., ZNN] ]

#Point at which I want to know the value of the Z
X0, Y0 …
Run Code Online (Sandbox Code Playgroud)

python arrays interpolation numpy scipy

6
推荐指数
1
解决办法
6711
查看次数

psycopg2.OperationalError:SSL SYSCALL 错误:在 Flask/SQLAclemy/Celery + PostgreSQL 应用程序上检测到 EOF

我有一个用 Flask+SQLALchemy+Celery 编写的应用程序,RabbitMQ 作为代理,数据库是 PostgreSQL (PostgreSQL 10.11 (Ubuntu 10.11-1.pgdg16.04+1) on x86_64-pc-linux-gnu,由 gcc 编译( Ubuntu 5.4.0-6ubuntu1~16.04.12)5.4.0 20160609,64位)。数据库托管在 DigitalOcean(1 个 CPU、2Gb RAM)中。所有应用程序工作人员(flask 或 celery)都在 Supervisor 中启动。

在我连接数据库的项目中,我使用flask_sqlalchemy包,如下所示:

from flask_sqlalchemy import SQLAlchemy
from flask import Flask

# Init 
app = Flask(__name__)

# Create the connection to database
db = SQLAlchemy(app)
Run Code Online (Sandbox Code Playgroud)

我在 Flask 应用程序中编写了一些登录,对其进行了测试,然后将其复制到 Celery 项目(其中数据库连接是相同的)。现在我的示例芹菜任务如下所示:

@celery.task(name='example_task', queue='default')
def example_task(payload):
    """ Some logic here """
    data = ExampleModel.query.filter(ExampleModel.id == payload["id"]).first()

    """ Some another app logic """
    db.session.add(SecondModel(payload))
    db.session.commit()
    
    return {"success": True}
Run Code Online (Sandbox Code Playgroud)

问题是当我在笔记本电脑上运行应用程序时,一切正常,没有错误。当我将我的应用程序上传到 VPS 上并且没有太多用户时,一切都还好。但一段时间后,当有 …

python postgresql sqlalchemy celery flask

6
推荐指数
1
解决办法
9890
查看次数

读取一个大的 big-endian 二进制文件

我有一个非常大的大端二进制文件。我知道这个文件中有多少个数字。我找到了一个如何使用 struct 读取大端文件的解决方案,如果文件很小,它可以完美运行:

    data = []
    file = open('some_file.dat', 'rb')

    for i in range(0, numcount)
            data.append(struct.unpack('>f', file.read(4))[0])
Run Code Online (Sandbox Code Playgroud)

但是,如果文件大小超过 ~100 mb,此代码的运行速度会非常慢。我当前的文件大小为 1.5gb,包含 399.513.600 个浮点数。上面的代码处理这个文件大约需要 8 分钟。

我找到了另一个解决方案,它工作得更快:

    datafile = open('some_file.dat', 'rb').read()
    f_len = ">" + "f" * numcount   #numcount = 399513600

    numbers = struct.unpack(f_len, datafile)
Run Code Online (Sandbox Code Playgroud)

这段代码运行大约 1.5 分钟,但这对我来说太慢了。早些时候我在 Fortran 中编写了相同的功能代码,它在大约 10 秒内运行。

在 Fortran 中,我用标志“big-endian”打开文件,我可以简单地读取 REAL 数组中的文件而无需任何转换,但在 python 中,我必须将文件作为字符串读取,并使用 struct 将每 4 个字节转换为浮点数。是否可以使程序运行得更快?

python io file

5
推荐指数
1
解决办法
7228
查看次数

标签 统计

python ×3

arrays ×1

celery ×1

file ×1

flask ×1

interpolation ×1

io ×1

numpy ×1

postgresql ×1

scipy ×1

sqlalchemy ×1