- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我最近发现了这样的说法:
np.savez is not multi-process safe, because it always uses gettempdir() + key + ".npy". So, if you're running the same script over different data sets, you will roach your own data when one process removes the /tmp/arr_0.npy of another process.
As luck would have it, I'm in that exact situation, so I have an example error:
Traceback (most recent call last): File
"/home/pedro/prospectus/prelim/bbvs/bin/skldthresh", line 99, in <module> main()
File "/home/pedro/prospectus/prelim/bbvs/bin/skldthresh", line 90, in main
np.savez("%smask-t%0.2f" % (outfile,threshold), result)
File "/usr/lib/python2.5/site-packages/numpy/lib/io.py", line 230, in savez
zip.write(filename, arcname=fname)
File "/usr/lib/python2.5/zipfile.py", line 541, in write
st = os.stat(filename) OSError: [Errno 2] No such file or directory: '/tmp/arr_0.npy'Fortunately, replacing
tempfile.gettempdir()
withtempfile.mkdtemp()
AND remembering to clean up at the end withos.rmdir(direc)
is all it takes to fix it as far as I can tell.
这到底意味着什么?我个人该如何避免这种情况? numpy 是否将写入 .npz
文件的数据存储在临时文件中,这些临时文件的名称可能与其他脚本中的其他临时 .npz
文件类似?!
我有一些科学实验,这些实验运行了几个小时,并通过 np.savez
保存结果。 savez
保存结果的目标路径不同,因此每个实验都有自己的结果路径。但是,它们的脚本本身位于同一目录中。
有趣的是,脚本有时会在发生此错误之前运行几个小时:
> Traceback (most recent call last): File
> "/work/var/slurmd/state.node348.d/job20832/slurm_script", line 53, in
> <module>
> E = Exp6_06() File
> "/work/experiments/s06/cs06_ex06.py", line
> 150, in __init__
> self.__start() File "/work/experiments/s06/cs06_ex06.py", line
> 374, in __start
> File "/home/fx092/.local/lib/python2.7/site-packages/numpy/lib/npyio.py",
> line 600, in savez_compressed
> _savez(file, args, kwds, True) File "/home/fx092/.local/lib/python2.7/site-packages/numpy/lib/npyio.py",
> line 630, in _savez
> fd, tmpfile = tempfile.mkstemp(suffix='-numpy.npy') File "/sw/env/openmpi/2Q4/lib/python2.7/tempfile.py",
> line 314, in mkstemp
> return _mkstemp_inner(dir, prefix, suffix, flags) File "/sw/env/openmpi/2Q4/lib/python2.7/tempfile.py",
> line 244, in _mkstemp_inner
> fd = _os.open(file, flags, 0600) OSError: [Errno 2] No such file or directory:
> '/work/tmp/node001.admin.2016-03-06-152506.fx092.27432/tmp5UulEz-numpy.npy'
使用的numpy版本:1.10.4
最佳答案
您的错误发生在mkstemp
中。引用建议使用 mkdtemp
代替:
https://docs.python.org/2/library/tempfile.html
tempfile.mkstemp([suffix=''[, prefix='tmp'[, dir=None[, text=False]]]])
Creates a temporary file in the most secure manner possible. There are no race conditions in the file’s creation, assuming that the platform properly implements the os.O_EXCL flag for os.open(). The file is readable and writable only by the creating user ID. If the platform uses permission bits to indicate whether a file is executable, the file is executable by no one. The file descriptor is not inherited by child processes.
和
tempfile.mkdtemp([suffix=''[, prefix='tmp'[, dir=None]]])
Creates a temporary directory in the most secure manner possible. There are no race conditions in the directory’s creation. The directory is readable, writable, and searchable only by the creating user ID.
The user of mkdtemp() is responsible for deleting the temporary directory and its contents when done with it.
引用的错误似乎是在创建临时文件并将它们收集到 zip
后发生的。您的错误似乎是在创建临时文件之一时发生的。
我对这些函数的使用还不够多,无法理解其中的区别。 我们可能需要研究lib/npyio.py
中的_savez
。
您使用什么操作系统? Linux、Mac、Windows?
<小时/>这是 _savez
的核心,现在位于 lib/npyio.py
文件中:
def _savez(file, args, kwds, compress):
....
zip = zipfile_factory(file, mode="w", compression=compression)
# Stage arrays in a temporary file on disk, before writing to zip.
=> fd, tmpfile = tempfile.mkstemp(suffix='-numpy.npy')
os.close(fd)
try:
for key, val in namedict.items():
fname = key + '.npy'
fid = open(tmpfile, 'wb')
try:
format.write_array(fid, np.asanyarray(val))
fid.close()
fid = None
=> zip.write(tmpfile, arcname=fname)
finally:
if fid:
fid.close()
finally:
os.remove(tmpfile)
zip.close()
当临时“保存”文件添加到存档中时,引用的错误发生在循环结束时。当它获取临时目录和临时文件(fd)时,您的错误很早就发生了。请注意,丢弃打开的文件句柄,仅使用名称(对每个数组重复)。
令人惊讶的是,临时目录在 mkstemp
函数调用期间消失了。它几乎感觉像是一个 openmpi
问题,而不是一个 savez
问题。
关于python - Numpy savez 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35836054/
作为脚本的输出,我有 numpy masked array和标准numpy array .如何在运行脚本时轻松检查数组是否为掩码(具有 data 、 mask 属性)? 最佳答案 您可以通过 isin
我的问题 假设我有 a = np.array([ np.array([1,2]), np.array([3,4]), np.array([5,6]), np.array([7,8]), np.arra
numpy 是否有用于矩阵模幂运算的内置实现? (正如 user2357112 所指出的,我实际上是在寻找元素明智的模块化减少) 对常规数字进行模幂运算的一种方法是使用平方求幂 (https://en
我已经在 Numpy 中实现了这个梯度下降: def gradientDescent(X, y, theta, alpha, iterations): m = len(y) for i
我有一个使用 Numpy 在 CentOS7 上运行的项目。 问题是安装此依赖项需要花费大量时间。 因此,我尝试 yum install pip install 之前的 numpy 库它。 所以我跑:
处理我想要旋转的数据。请注意,我仅限于 numpy,无法使用 pandas。原始数据如下所示: data = [ [ 1, a, [, ] ], [ 1, b, [, ] ], [ 2,
numpy.random.seed(7) 在不同的机器学习和数据分析教程中,我看到这个种子集有不同的数字。选择特定的种子编号真的有区别吗?或者任何数字都可以吗?选择种子数的目标是相同实验的可重复性。
我需要读取存储在内存映射文件中的巨大 numpy 数组的部分内容,处理数据并对数组的另一部分重复。整个 numpy 数组占用大约 50 GB,我的机器有 8 GB RAM。 我最初使用 numpy.m
处理我想要旋转的数据。请注意,我仅限于 numpy,无法使用 pandas。原始数据如下所示: data = [ [ 1, a, [, ] ], [ 1, b, [, ] ], [ 2,
似乎 numpy.empty() 可以做的任何事情都可以使用 numpy.ndarray() 轻松完成,例如: >>> np.empty(shape=(2, 2), dtype=np.dtype('d
我在大型 numpy 数组中有许多不同的形式,我想使用 numpy 和 scipy 计算它们之间的边到边欧氏距离。 注意:我进行了搜索,这与堆栈中之前的其他问题不同,因为我想获得数组中标记 block
我有一个大小为 (2x3) 的 numpy 对象数组。我们称之为M1。在M1中有6个numpy数组。M1 给定行中的数组形状相同,但与 M1 任何其他行中的数组形状不同。 也就是说, M1 = [ [
如何使用爱因斯坦表示法编写以下点积? import numpy as np LHS = np.ones((5,20,2)) RHS = np.ones((20,2)) np.sum([ np.
假设我有 np.array of a = [0, 1, 1, 0, 0, 1] 和 b = [1, 1, 0, 0, 0, 1] 我想要一个新矩阵 c 使得如果 a[i] = 0 和 b[i] = 0
我有一个形状为 (32,5) 的 numpy 数组 batch。批处理的每个元素都包含一个 numpy 数组 batch_elem = [s,_,_,_,_] 其中 s = [img,val1,val
尝试为基于文本的多标签分类问题训练单层神经网络。 model= Sequential() model.add(Dense(20, input_dim=400, kernel_initializer='
首先是一个简单的例子 import numpy as np a = np.ones((2,2)) b = 2*np.ones((2,2)) c = 3*np.ones((2,2)) d = 4*np.
我正在尝试平均二维 numpy 数组。所以,我使用了 numpy.mean 但结果是空数组。 import numpy as np ws1 = np.array(ws1) ws1_I8 = np.ar
import numpy as np x = np.array([[1,2 ,3], [9,8,7]]) y = np.array([[2,1 ,0], [1,0,2]]) x[y] 预期输出: ar
我有两个数组 A (4000,4000),其中只有对角线填充了数据,而 B (4000,5) 填充了数据。有没有比 numpy.dot(a,b) 函数更快的方法来乘(点)这些数组? 到目前为止,我发现
我是一名优秀的程序员,十分优秀!