【问题标题】:Numpy savetxt method produces strange hex charactersNumpy savetxt 方法产生奇怪的十六进制字符
【发布时间】:2021-04-27 08:20:38
【问题描述】:

我对 Python 3.8.6 中的 numpy 包有一些奇怪的问题。我正在尝试编写 float64 的 numpy 数组,但有时它会将十六进制字符写入文件:\x00\x00...

这是我正在运行的代码:

#!/usr/bin/env python
# coding: utf-8
import numpy as np
from pathlib import Path
import shutil as sh

resdir = Path('./results/')
if not resdir.is_dir():
    resdir.mkdir(parents=True)

trajdir = resdir / 'traj'
if trajdir.is_dir():
  sh.rmtree(trajdir)
trajdir.mkdir()

phi = np.zeros([2**12,2], dtype=np.float_)
itermax = 100
idump_fmt = '{:03d}'
# loop
# dump
for i in range(1, itermax):
    print("i = {:d}".format(i))
    fname = 'i' + idump_fmt.format(i) + '.dat'
    np.savetxt(trajdir / fname, np.zeros(phi.shape, dtype=phi.dtype))
    np.loadtxt(trajdir / fname).T

我在 docker 容器中运行此代码。我有一个基于下面 Dockerfile 的 docker 映像,我正在运行命令:

docker run --rm -it -v $PWD:/home/python/shared -w /home/python/shared savetxt-test:latest python test_savetxt.py

savetxt-test:latest 是我的 docker 镜像的名称,test_savetxt.py 是包含上述代码的文件。

并非总是如此,但可能每 2-3 次一次,上述命令会产生以下错误:

Traceback (most recent call last):
 36   File "test_savetxt.py", line 25, in <module>
 37     np.loadtxt(trajdir / fname).T
 38   File "/usr/local/lib/python3.8/site-packages/numpy/lib/npyio.py", line 1139, in loadtxt
 39     for x in read_data(_loadtxt_chunksize):
 40   File "/usr/local/lib/python3.8/site-packages/numpy/lib/npyio.py", line 1067, in read_data
 41     items = [conv(val) for (conv, val) in zip(converters, vals)]
 42   File "/usr/local/lib/python3.8/site-packages/numpy/lib/npyio.py", line 1067, in <listcomp>
 43     items = [conv(val) for (conv, val) in zip(converters, vals)]
 44   File "/usr/local/lib/python3.8/site-packages/numpy/lib/npyio.py", line 763, in floatconv
 45     return float(x)
 46 ValueError: could not convert string to float: '\x00\x00\x00\x00\x00\x00\x[...]

我使用的是 Mac OS 11.1,当我直接在我的系统中运行此代码(而不是通过 docker 容器)时,我没有遇到此问题。我怀疑这可能与 docker 的安装问题有关,但我不确定如何解决这个问题。有什么想法吗?

Dockerfile:

FROM python:3.8-slim-buster

########## preconfig ##########
USER root
ENV DEBIAN_FRONTEND=noninteractive
RUN export DEBIAN_FRONTEND

RUN apt-get update \
    && apt-get -y install libssl-dev \
    && apt-get clean \
    && pip install wheel

RUN pip install --upgrade pip

# Install dependencies
RUN apt-get update && apt-get install -y less

########## python ##########
RUN pip install numpy

########################
#add new sudo user
RUN apt-get install -y sudo
ENV USERNAME python
ENV GROUPNAME python
ENV UID 1000
ENV GID 1000
RUN groupadd --gid $GID $GROUPNAME && \
     useradd -g $GROUPNAME -u $UID -m $USERNAME && \
     echo "$USERNAME:$USERNAME" | chpasswd && \
     usermod --shell /bin/bash $USERNAME && \
     usermod -aG sudo $USERNAME && \
     echo "$USERNAME ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/$USERNAME && \
     chmod 0440 /etc/sudoers.d/$USERNAME

USER $USERNAME

########## docker behavior ##########
CMD /bin/bash

【问题讨论】:

    标签: python python-3.x macos docker numpy


    【解决方案1】:

    实际上这是由 iCloud Drive 同步引起的。关闭后,我不再遇到此问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-08
      • 2018-04-14
      • 2014-02-12
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 2016-01-17
      • 2013-04-21
      相关资源
      最近更新 更多