首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当我将np数组写入二进制文件时出现问题,新文件只有原来文件的一半

当你将NumPy数组写入二进制文件时遇到问题,新文件大小只有原来文件的一半,这通常是由于以下几个原因造成的:

基础概念

NumPy数组是一种高效的多维数组对象,常用于科学计算。将NumPy数组写入二进制文件通常使用numpy.savenumpy.ndarray.tofile方法。

可能的原因

  1. 数据类型不匹配:写入文件时指定的数据类型与数组实际的数据类型不匹配,导致数据被截断或压缩。
  2. 文件模式不正确:使用了错误的文件打开模式,例如使用了文本模式而不是二进制模式。
  3. 数组形状问题:数组的形状在写入过程中发生了变化,导致数据不完整。
  4. 文件指针位置:文件指针未正确重置,导致部分数据未被写入。

解决方法

以下是一些解决这个问题的步骤:

1. 检查数据类型

确保写入文件时指定的数据类型与数组实际的数据类型一致。

代码语言:txt
复制
import numpy as np

# 示例数组
arr = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.float64)

# 写入二进制文件
arr.tofile('output.bin', format='<f8')  # '<f8' 表示小端字节序的64位浮点数

2. 使用正确的文件模式

确保使用二进制模式打开文件。

代码语言:txt
复制
with open('output.bin', 'wb') as f:
    arr.tofile(f)

3. 检查数组形状

确保数组的形状在写入过程中没有发生变化。

代码语言:txt
复制
print(arr.shape)  # 确保形状正确

4. 重置文件指针

如果需要多次写入,确保文件指针正确重置。

代码语言:txt
复制
with open('output.bin', 'wb') as f:
    arr.tofile(f)
    f.seek(0)  # 重置文件指针到文件开头

示例代码

以下是一个完整的示例代码,展示了如何正确地将NumPy数组写入二进制文件:

代码语言:txt
复制
import numpy as np

# 示例数组
arr = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.float64)

# 写入二进制文件
with open('output.bin', 'wb') as f:
    arr.tofile(f)

# 验证文件大小
import os
file_size = os.path.getsize('output.bin')
print(f"File size: {file_size} bytes")

参考链接

通过以上步骤,你应该能够解决将NumPy数组写入二进制文件时文件大小不正确的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python数据分析实战之数据获取三大招

也就是说,新内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件开头。这是默认模式。...wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。...如果该文件不存在,创建新文件。 ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件结尾。也就是说,新内容将会被写入到已有内容之后。...如果该文件不存在,创建新文件进行写入。 ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件结尾。如果该文件不存在,创建新文件用于读写。...fix_imports : bool, optional 布尔值, 选填, 默认为True, 只有在python3上加载python2生成pickle文件才有用, 其中包括包含对象数组npy/

6.5K30

Python数据分析实战之数据获取三大招

也就是说,新内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件开头。这是默认模式。...wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。...如果该文件不存在,创建新文件。 ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件结尾。也就是说,新内容将会被写入到已有内容之后。...如果该文件不存在,创建新文件进行写入。 ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件结尾。如果该文件不存在,创建新文件用于读写。...fix_imports : bool, optional 布尔值, 选填, 默认为True, 只有在python3上加载python2生成pickle文件才有用, 其中包括包含对象数组npy/

6.1K20
  • Python3学习笔记 | 九、Python类型与运算-文件

    文件指针将会放在文件开头。 w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。...如果该文件不存在,创建新文件。 a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件结尾。也就是说,新内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。...ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件结尾。也就是说,新内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 a+ 打开一个文件用于读写。...seek可以有两个传递变量,只有一个变量,就是更改当前指针,或者第一个变量为0,第二个变量为1时候,会返回当前指针位置,这个与tell方法同样。...文件数据解析为一个Python对象。

    57910

    ​Data Science | 福利列表 | Numpy基础(三)

    前文导读 Data Science | Numpy基础(一) Data Science | Numpy基础(二) numpy读取/写入数组数据 在我们使用numpy处理了数据之后,可以数组保存为保存为...Numpy专用二进制格式,当我们这样操作之后,就不能用notepad++等打开看了(乱码)。...np.load和np.save是读写磁盘数组数据两个主要函数,默认情况下,数组是以未压缩原始二进制格式保存在扩展名为.npy文件中。...('arraydata.npy') print(ar_load) numpy读取/写入文本数据 除了保存为npy文件外,我们还可以数据保存为txt格式文本文件,np可以读写1维和2维数组同时可以指定各种分隔符...='', comments='# '):存储为文本txt文件 读取文本数据(txt) 同样这里要注意是读取也要标注分隔符值,如果与保存不同会报错。

    62620

    Python3 读写文件

    w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 wb 以二进制格式打开一个文件只用于写入。...如果该文件已存在,文件指针将会放在文件结尾。也就是说,新内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 ab 以二进制格式打开一个文件用于追加。...如果该文件已存在,文件指针将会放在文件结尾。也就是说,新内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 a+ 打开一个文件用于读写。...所以若不想清空原来内容而是直接在后面追加新内容,就用'a'这个模式。 我们可以反复调用write()来写入文件,但是务必要调用f.close()来关闭文件。...当我们写文件,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲时候再慢慢写入只有调用close()方法,操作系统才保证把没有写入数据全部写入磁盘。

    4.3K20

    怎样学Python之第十九课 高级文件输入和输出

    这使得读取和写入二进制文件变得容易。 如果我们要读取二进制文件,我们需要一个文件来读取。我们编译一个简单C程序来打印[Hello,World!]....>>> print tfile 现在,当我们执行这个打印语句,大量乱码将被打印到屏幕上。 我们无法阅读,但我们系统知道这意味着什么。让我们执行此打印语句以查看二进制文件: ?...现在我们二进制文件内容存储在变量下,让我们创建一个新文件并将二进制内容写入它。 如果我们试图打开一个在Reading模式下不存在文件,该文件将在打开函数中指定地方创建。...让我们打开一个名为test2新文件,并将它二进制输出写入它: >>> with open(‘test2’, ‘wb’) as file2:.......>>> 现在我们已经这个二进制代码写入了一个文件,我们可以像原来那样真正执行这个文件。我们来演示这个并执行我们新文件: ~# ./test2Hello, World! 成功了!

    70050

    文件系统和软硬链接

    也就是说操作系统4KB数据加载进来以后,很可能不能被完全利用,但是这也不一定就意味着浪费。根据局部性原理:当我们访问了该数据以后,大概率是要访问该数据周围数据。...在inode中存在一个block[15]数组,该数组中0-11下标存放都是该文件使用数据块,而block[12]对应数据块中不存放文件内容,而是存放其他数据块地址,文件数据也可以写入到数据块所存储数据块中...在创建一个新文件,是实实在在写入数据,但是要删除一个文件只要在inode Bitmap中将对应比特位由1置0即可,这就是为什么删除文件远比下载文件要快。...在Linux权限学习提到要在一个目录中创建新文件必须要有写入权限,这是因为在目录下创建新文件就要在该目录对应数据块中写入新文件和其inode对应映射关系。...硬链接使用场景 当我们创建一个新文件,它硬链接数就是1(代表它自己本身).但是我们创建一个目录,默认硬链接数就是2,这是因为除了目录本身,还会默认创建一个.文件代表当前目录 当我们创建一个目录后

    38730

    Python Numpy文件读写中内存映射应用

    在处理大规模数据集,内存有效管理至关重要。特别是当数据量非常庞大,一次性整个数据集加载到内存中可能导致内存不足,进而影响程序性能甚至引发崩溃。...内存映射文件是一种磁盘文件一部分或全部映射到内存中技术,允许像操作数组一样读取和修改文件内容,而不需要将整个文件加载到内存中。...通过flush()方法,可以修改过数据写入到磁盘中。 读取内存映射文件 当处理已经创建内存映射文件,可以使用相同memmap函数以只读模式或读写模式访问文件内容。...可以读取和修改文件内容。 mode='w+':写入模式。如果文件不存在则创建新文件,如果存在则覆盖文件内容。...通过这种方式,避免了整个数据集加载到内存中,从而减少了内存压力。 内存映射文件局限性 文件格式限制:内存映射适用于二进制格式文件,如.dat、.npy等。

    17610

    Redis初识~持久化数据

    即使在重写时候,服务器发生了宕机,现有的AOF文件也不丢失。一旦新文件创建完成。Redis就会切换到新文件中并开始对新AOF文件进行追加操作。 AOF文件有序保存了对数据库执行所有写入操作。...RDB快照保存 默认情况下,Redis 数据库快照片保存在dump.rdb二进制文件中,我们在Redis进行设置。 save 60 1000 满足条件就是 60秒内至少有1000 个键被改动。...工作方式 上面所说保存 保存到我二进制文件中,服务器需要执行以下操作才可以实现。 Redis调用forks ,同时拥有父进程和子进程。 子进程数据集写入到一个临时RDB文件中。...当子进程完成对新RDB文件写入时,新文件替换旧文件,并删除旧RDB文件。 这种方式帮助Redis 可以从 写复制机制中获益。 2....子进程开始AOF文件内容写入到临时文件中。 对于所写父进程是两边操作,一边写入到内存换从中,一边这些数据追加到AOF文件中。

    61630

    python3:文件操作常用mode参数用法详解

    会覆盖原来内容,所以我们一定要注意 f.seek(0) #光标定位到文件开始位置 print( f.read()) #给 w 加上 + 号,用有了...文件指针将会放在文件开头。一般用于非文本文件如图片等。 这里暂时不演示,下一节会教大家如何保存图片和视频到本地 wb 以二进制格式打开一个文件只用于写入。...也就是说,新内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。...如果该文件已存在,文件指针将会放在文件结尾。也就是说,新内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 a+ 打开一个文件用于读写。...print( f.read()) #输出:python工程狮plus (原内容为‘python工程狮’) ab+ 以二进制格式打开一个文件用于追加。

    75720

    python3 文件操作常用mode参数用法详解

    会覆盖原来内容,所以我们一定要注意 f.seek(0) #光标定位到文件开始位置 print( f.read()) #给 w 加上 + 号,用有了...文件指针将会放在文件开头。一般用于非文本文件如图片等。 wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。...如果该文件已存在,文件指针将会放在文件结尾。也就是说,新内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 ab 以二进制格式打开一个文件用于追加。...如果该文件已存在,文件指针将会放在文件结尾。也就是说,新内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 a+ 打开一个文件用于读写。...print( f.read()) #输出:python工程狮plus (原内容为‘python工程狮’) ab+ 以二进制格式打开一个文件用于追加。

    70410

    【C-文件操作】一文教你如何代码数据持久化

    格式化输出函数:文件写入--->fprintf  4-6格式化输入函数:文件读出--->fscanf ​编辑 4-7 sprintf和sscanf  4-8二进制读和写 fread和fwrite...文件:载体,能将临时性信息通过文件变为永久性信息 使用文件可以使得数据持久化:当我们在运行程序结束后,程序再次运行时,上一个程序数据就会丢失,为了将上一次程序数据保存下来,就产生了位于硬盘上文件...参数3:指向FILE结构指针 返回值:读取成功返回读取到字符数组首地址; 读取失败返回NULL 关于n: 当n>STR_MAX_SIZE,程序会自动识别,再读取完该行所有字符后添加...'\0'作为结束符 当n<=STR_MAX_SIZE,写n,能读取到字符也只有n-1个....\n"); Sleep(10000); fclose(pf); pf = NULL; }  当fclose(pf)或者程序结束后,程序会自动刷新文件缓冲区。

    72830

    python刷新Excel模型数据源

    问题描述: 关于excel和python协同联动 传统python处理完数据直接to_excel(“file_path”) 是生成了一个新文件替换掉了原来同名文件新文件只有当前写入数据...,可以发挥excel可视化属性, 更方便与其他同事进行对接 代码示例: #导入库 import pandas as pd import numpy as np import os,openpyxl...,它初始化空工作簿并删除所有工作表, #writer.book = book原来表里面的内容保存到writer中 writer.book=book #activate...row: cell.value=None #dataframe行列数 idx_num,col_num=data.shape #新数据写入当前活动表...,可以不使用win32com (上面这种方法刷新全部数据源,包含PQ模型读取数据) 直接在excel里设置数据透视表打开刷新即可 设置路径:数据透视–》设计–》选项–》数据–》(勾选)打开文件刷新数据

    1.4K11

    Linux之基础IO

    ,默认是在当前路径下对该文件进行访问; 当我们把fopen,fclose,fread,fwrite等接口写完之后,代码编译形成二进制可执行程序后,在还没有运行情况下,文件对应操作有没有起作用?...先看下面这个例子: 我们知道了,系统启动后,默认会打开0,1,2这三个文件符对应文件,如果我们这三个中其中一个关闭,然后去打开新文件,这个新文件对应fd会是多少呢?...答:fd = 1对应是标准输出,即我们将要打印内容写到标准输出。此时,我们关闭了1,fd = 1重新分配给文件log.txt,则要打印出来内容就会写入文件log.txt。...=1对应文件关闭,然后fd = 1重新分配给新文件例子,就是一个重定向过程。...,留下只有oldfd(oldfd所对应文件指针,拷贝给newfd对应数组内容) 输出重定向 例子: 原来打印在显示器上内容,写入文件log.txt上 文件test.c 1 #include

    19030

    Python3中打开文件方式(With open)「建议收藏」

    如果该文件已存在,文件指针将会放在文件结尾。也就是说,新内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 rb 以二进制格式打开一个文件用于只读。...文件指针将会放在文件开头。这是默认模式。 wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 ab 以二进制格式打开一个文件用于追加。...如果该文件不存在,创建新文件。 ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件结尾。如果该文件不存在,创建新文件用于读写。...当我们写文件,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲时候再慢慢写入只有调用close()方法,操作系统才保证把没有写入数据全部写入磁盘。...要写入特定编码文本文件,请给open()函数传入encoding参数,字符串自动转换成指定编码字符编码 5.打开非utf-8编码文件 要读取非UTF-8编码文本文件,需要给open()函数传入

    2.3K10

    【翻译】图像到Base64字符串转换

    1 概览 在这个简短教程中,我们介绍如何使用 Apache Common IO 包和 Java 8 原生类 Base64 图片文件转成 base64 字符串,然后把 base64 字符串再转成图片...这个操作也可以应用到任何二进制文件或者二进制数组中。当我们需要以 json 格式传输二进制内容时候,例如从移动app程序传到到 REST 端,它非常有用。...Maven Central. 3 图片转成 base64 字符串 首先,我们文件内容转成 byte 数组,然后使用 Java 8 Base64 类编码这个数组。...4 base64 字符串转成图片 现在我们有一个 Base64 字符串了,让我们把它编码回去成二进制文件并且写入文件。...最后,我们可以通过读取一个文件,将其编码为 Base64 字符串,然后解码回一个新文件来验证代码是否正确工作: public class FileToBase64StringConversionUnitTest

    74430

    3-数据存储之文件存储(1)

    wb+ 以二进制格式、读写模式打开文件,一般用于非文本文件 a 以追加模式打开一个文件,对文件只有写入权限,如果文件已经存在,文件指针放在文件末尾(即新写入内容会位于已有内容之后);反之,则会创建新文件...ab 以二进制格式打开文件,并采用追加模式,对文件只有写权限。如果该文件已存在,文件指针位于文件末尾(新写入文件会位于已有内容之后);反之,则创建新文件。...a+ 以读写模式打开文件;如果文件存在,文件指针放在文件末尾(新写入文件会位于已有内容之后);反之,则创建新文件。...ab+ 以二进制模式打开文件,并采用追加模式,对文件具有读写权限,如果文件存在,则文件指针位于文件末尾(新写入文件会位于已有内容之后);反之,则创建新文件。...原来使用requests请求出来数据没有小说信息(数据),抓包发现该网站是通过Ajax技术实现数据请求,所以我找到 了该网站API,如图所示: ?

    1.6K30

    【Linux】磁盘结构文件系统软硬链接动静态库

    同时,需要将新文件文件名与 inode 映射关系写入到目录 data block 中。...而当我们在目录下新建文件/文件,操作系统会向目录 data block 里面写入新文件与 inode 映射关系。...删除文件 删除文件很简单,只需要将 inode bitmap 和 block bitmap 里面对应比特位置为 0 即可,后面新文件文件属性和文件内容直接覆盖原来已删除文件属性和内容。...注:文件 inode 中存在一个类似于 count 整形变量来记录文件硬链接数,当我们为文件创建硬链接 count 加1,删除原文件或者硬链接文件 count 减1 (C++中称为引用计数,Linux...(我们也可以使用 unlink 指令来删除链接文件) 所以,创建软链接会创建新文件,软链接文件有自己独立 inode,软链接通过文件方式来链接文件,所以本质上软链接是文件路径写入新文件

    1.3K00

    Python Numpy文件操作方法与实例分享

    np.genfromtxt() 自动缺失值转换为 NaN,这是在处理不完整数据非常实用功能。 读写二进制文件 与文本文件相比,二进制文件在存储和读取大规模数据更为高效。...使用np.save()保存二进制文件 np.save() 函数Numpy数组保存为 .npy 格式二进制文件。...读写多个数组:.npz格式 当需要同时保存多个数组,Numpy提供了 .npz 格式,这是一种压缩文件格式,可以多个Numpy数组一起保存。...读取和写入自定义二进制文件 在某些场景下,可能需要自定义二进制文件格式。Numpy提供了 tofile() 和 fromfile() 函数,用于数组直接写入二进制文件或从二进制文件读取数据。...使用tofile()保存自定义二进制文件 tofile() 函数可以数组写入二进制文件

    9310
    领券