我有一个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 代码,通过 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 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) 我有一组数据点,它们看起来有点像一条在开头附近带有曲线的线。请参阅下图,其中显示了具有最佳拟合线(适合整个数据集)的点。
相反,它们可以用两个线性函数来描述(一条穿过最左边的一组点的线和一条穿过其余数据点的单独的线)。这些点实际上对应的是中子衰变,其中包含两种不同的同位素。
我不知道哪些点对应于哪种同位素,所以我需要以某种方式做出最好的猜测。一种同位素的曲线将是一条直线,而另一种同位素的曲线将是不同的直线。如何将两条不同的最佳拟合线(线性)拟合到数据点集,以便优化两者的拟合?
我的一个想法是选择一个“截止点”,例如在t=100
(x 轴)处,并将左侧的点拟合为一条线,将右侧的点拟合为另一条线。然后我可以计算两条线的 chi^2 以获得拟合的“优点”。然后,我可以继续用略有不同的截止点多次做同样的事情,直到我找到提供最佳整体拟合的那对线。
另一个似乎更复杂的想法是将这些数据点描述为两条线的组合y= m1*t + m2*t + b1 + b2
,其中m
s 是斜率,b
s 是 y 截距。然后,取总曲线的导数,我会有dy/dt = m1+m2
. 然后也许我可以循环通过不同的“截止点”,并拟合线,直到我得到一个组合,其中导数最接近m1+m2
. 但我不确定如何做到这一点,因为我最初没有使用一条曲线,只是一堆离散数据点。
在 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 ×5
arrays ×2
python-3.x ×2
data-fitting ×1
fetchall ×1
generator ×1
kill ×1
list ×1
memory ×1
mysql ×1
mysql-python ×1
numpy ×1
optimization ×1
split ×1
string ×1