C++读取numpy数据二进制文件
C++与Python中变量对应的精度类型:
https://docs.scipy.org/doc/numpy/user/basics.types.html#array-types-and-conversions-between-types
(1)将numpy数组保存为二进制文件
def save_bin(data, bin_file, dtype="double"):
C++int对应Python np.intc
C++float对应Python np.single
C++double对应Python np.double
:param data:
:param bin_file:
:param dtype:
:return:
data = data.astype(np.double)
data.astype(dtype).tofile(bin_file)
(2)用numpy读取二进制文件
def load_bin(bin_file, shape=None, dtype="double"):
:param bin_file:
:param dtype:
:return:
data = np.fromfile(bin_file, dtype=dtype)
if shape:
data = np.reshape(data, shape)
return data
if __name__ == "__main__":
bin_file = "data.bin"
shape = (2, 5)
data1 = np.arange(10, 20).reshape(shape)
save_bin(data1, bin_file)
data2 = load_bin(bin_file, shape)
print(data1)
print(data2)
(3)用C++读取二进制文件
#include <iostream>
#include <fstream>
using namespace std;
int main()
int row=2;
int col=5;
double fnum[row][col] = {0};
ifstream in("bin/data.bin", ios::in | ios::binary);
in.read((char *) &fnum, sizeof fnum);
cout << in.gcount() << " bytes read\n";
// show values read from file
for(int i=0; i<row; i++){
for(int j=0;j<col;j++){
cout << fnum[i][j] << ",";
std::cout<<endl;
in.close();
return 0;
输出结果:
C++读取numpy数据二进制文件C++与Python中变量对应的精度类型:https://docs.scipy.org/doc/numpy/user/basics.types.html#array-types-and-conversions-between-types(1)将numpy数组保存为二进制文件def save_bin(data, bin_file, dtype="double"): """ C++int对应Python np.intc C++float
NumPy提供了多种存取数组内容的文件操作函数。保存数组数据的文件可以是二进制格式或者文本格式。二进制格式的文件又分为NumPy专用的格式化二进制类型和无格式类型。
一,tofile()和fromfile()
tofile()将数组中的数据以二进制格式写进文件
tofile()输出的数据不保存数组形状和元素类型等信息
fromfile()函数读回数据时需要用户指定元素类型,并对数组的形状进行适当的修改
从上面的例子可以看出,在读入数据时:需要正确设置dtype参数,并修改数组的shape属性才能得到和原始数据一致的结果。无论数据的排列顺序是C语言格式还是Fortran语言格式,
首先需要确定C++和Python中变量对应的精度类型,
https://docs.scipy.org/doc/numpy/user/basics.types.html#array-types-and-conversions-between-types
C++int对应Pythonnp.intc
C++float对应Pythonnp.single
C++double对应Pytho...
# 按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流)
pack(fmt, v1, v2, ...)
# 按照给定的格式(fmt)解析字节流string,返回解析出来的tuple
unpack(fmt, string)
# 计算给定的格式(fmt)占用多少字节的内存
calcsize(fmt)
例如:我需要读取一个名为filename,存放着形状为[100,1025]的浮点数的文件。可以采用以下办法
import numpy as np
import struct
# 加载测试数据
目标:目标文件为一个float32型存储的二进制文件,按列优先方式存储。本文使用Python读取该二进制文件并使用matplotlib.pyplot相关工具画出图像
工具:Python3, matplotlib,os,struct,numpy
1. 读取二进制文件
首先使用open函数打开文件,打开模式选择二进制读取”rb”。
f = open(filename, "rb")
第二步,需要打开按照行列读取文件,由于是纯二进制文件,内部不含邮任何的数据结构信息,因此我们需要给定二进制数据的行数列数(nx和ny)来确定图像的形状。这里我们的数据类型是float32型的,对应过来是4bytes,使
最直接的想法是先转置矩阵,然后翻转每一列。这个简单的方法已经能达到最优的时间复杂度O(N^2)。
class Solution {
public void rotate(int[][] matrix) {
int n = matrix.length;
// transpose matrix
for (int
NumCpp:Python NumPy库的一个Templatized Header Only C ++实现
NumCpp 是一个高性能的数学计算 C++ 库,它提供了一个简单的 Numpy/Matlab 类似的接口。
地址 https://github.com/dpilger26/NumCpp
文档地址 https://dpilger26.github.io/NumCpp/doxygen...