小编cur*_*smo的帖子

用少量RAM优化我的大数据代码

我有一个120 GB的文件保存(二进制文件夹pickle),包含大约50,000(600x600)2d numpy数组.我需要使用中位数来堆叠所有这些数组.最简单的方法是将整个文件作为数组列表并使用np.median(arrays, axis=0).但是,我没有太多的RAM可以使用,所以这不是一个好的选择.

所以,我尝试逐像素地堆叠它们,就像我一次关注一个像素位置(i, j)一样,然后逐个读取每个数组,将给定位置的值附加到列表中.一旦保存了所有数组中某个位置的所有值,我就会使用np.median,然后只需将该值保存在列表中 - 最后将具有每个像素位置的中位数.最后我可以将其重塑为600x600,我会完成的.这个代码如下.

import pickle
import time
import numpy as np

filename = 'images.dat' #contains my 50,000 2D numpy arrays

def stack_by_pixel(i, j):
    pixels_at_position = []
    with open(filename, 'rb') as f:
        while True:
            try:
                # Gather pixels at a given position
                array = pickle.load(f)
                pixels_at_position.append(array[i][j])
            except EOFError:
                break
    # Stacking at position (median)
    stacked_at_position = np.median(np.array(pixels_at_position))
    return stacked_at_position

# Form whole stacked image
stacked = []
for …
Run Code Online (Sandbox Code Playgroud)

python arrays optimization numpy python-3.x

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

打印cursor.fetchall() 的结果,不带尾随“L”

我有一个 python 代码,通过 MySQLdb 访问 mysql 来运行 select 语句。然后,我将cursor.fetchall()输出收集为数组,但问题是它L在每个输出的末尾打印一个,如下所示:

sql = "SELECT data1, data2  FROM table1, table2 ;"
cursor.execute(sql)
dataarray = cursor.fetchall()
print dataarray

>>> ((75379L, 45708L), ...)
Run Code Online (Sandbox Code Playgroud)

但在我的表格中,没有 L,只有数字。我怎样才能确保它只获取并打印没有 L 的数据?我宁愿避免[:-1]在字符串上使用,因为这样它会将我的None值更改为Non.

python mysql arrays fetchall mysql-python

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

如何防止Python杀掉代码

我有一个相当长的 Python 3 代码,它对许多图像进行过采样,然后将它们拟合为 2D 高斯分布,以查找图像中源的相关参数(质心坐标、幅度等),将其移动到中心,标准化,然后堆叠所有这些都以中位数结束。我正在尝试使用大约 50,000 张图像的数据来做到这一点。我已经提取了数据并从以前的代码中保存了它,这给了我一个名为 的文件中所有图像数据(numpy 数组)的二进制文件initial_data.data,并且我还使用了 astropy wcs 包来找到对质心坐标的良好猜测,因此它们也保存(以相同的顺序)在centroid_coords.data. 当我第一次尝试在所有图像上运行我的代码时,它Killed在代码的过采样部分期间说道。然后我决定尝试将所有图像分成几个小节,并一次在一个小节上运行代码。如果只是几个小节,这还可以,但如果我必须一次只处理 5,000 张图像,那就太乏味且不切实际了!下面是我的代码的其余部分,其中我尝试了三分之一的小节,并尝试仅对第一个进行操作(因此我在1第一个用户输入行之后输入)。

import pickle
import numpy as np
import re
from scipy import optimize, interpolate
from astropy.io import fits
from astropy.nddata import Cutout2D

frac = int(input('Subset 1, 2, or 3? ')) # select which subset of images to operate on
oversampled_file = 'oversampled_images_frac%d.data' % (frac)
params_file = 'gparams_2D_frac%d.data' % (frac)
final_images_file = 'images_b4stacking_2D_frac%d.data' % (frac)
FWHM_file = 'FWHM_2D_frac%d.data' …
Run Code Online (Sandbox Code Playgroud)

python memory kill generator python-3.x

5
推荐指数
0
解决办法
958
查看次数

如何将两个线性函数拟合到一组数据点?

我有一组数据点,它们看起来有点像一条在开头附近带有曲线的线。请参阅下图,其中显示了具有最佳拟合线(适合整个数据集)的点。

绘制一条最佳拟合线

相反,它们可以用两个线性函数来描述(一条穿过最左边的一组点的线和一条穿过其余数据点的单独的线)。这些点实际上对应的是中子衰变,其中包含两种不同的同位素。

我不知道哪些点对应于哪种同位素,所以我需要以某种方式做出最好的猜测。一种同位素的曲线将是一条直线,而另一种同位素的曲线将是不同的直线。如何将两条不同的最佳拟合线(线性)拟合到数据点集,以便优化两者的拟合?

我的一个想法是选择一个“截止点”,例如在t=100(x 轴)处,并将左侧的点拟合为一条线,将右侧的点拟合为另一条线。然后我可以计算两条线的 chi^2 以获得拟合的“优点”。然后,我可以继续用略有不同的截止点多次做同样的事情,直到我找到提供最佳整体拟合的那对线。

另一个似乎更复杂的想法是将这些数据点描述为两条线的组合y= m1*t + m2*t + b1 + b2,其中ms 是斜率,bs 是 y 截距。然后,取总曲线的导数,我会有dy/dt = m1+m2. 然后也许我可以循环通过不同的“截止点”,并拟合线,直到我得到一个组合,其中导数最接近m1+m2. 但我不确定如何做到这一点,因为我最初没有使用一条曲线,只是一堆离散数据点。

在 Python 中优化两个拟合的最佳方法是什么?

python curve-fitting data-fitting

5
推荐指数
2
解决办法
3060
查看次数

根据关键字python拆分文本字符串

我有一串这样的文字:

'tx cycle up.... down
rx cycle up.... down
phase:...
rx on scan: 123456
tx cycle up.... down
rx cycle up.... down
phase:...
rx on scan: 789012
setup
tx cycle up.... down
rx cycle up.... down
tx cycle up.... down
rx cycle up.... down'
Run Code Online (Sandbox Code Playgroud)

我需要将此字符串拆分为一个字符串列表,这些字符串被拆分为这些块:

['tx cycle up.... down rx cycle up.... down phase:.... rx on scan: 123456', 
 'tx cycle up.... down rx cycle up.... down phase:.... rx on scan: 789012',
 'tx cycle up... down rx cycle up.... down',
 'tx …
Run Code Online (Sandbox Code Playgroud)

python string split list

2
推荐指数
1
解决办法
576
查看次数