C++读取保存为二进制的 numpy 数组

首先需要确定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对应Pythonnp.double

numpy数组保存为二进制文件

import numpy as np
a = np.array([[1.888,2.8888,3.88888],[4.666,5.6666,6.66666]])
a = a.astype(np.double)
a.astype('double').tofile("varr.data")

C++读取二进制文件

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
  double fnum[2][3] = {0};

  ifstream in("varr.data", ios::in | ios::binary);
  in.read((char *) &fnum, sizeof fnum);

  // see how many bytes have been read
  cout << in.gcount() << " bytes read\n";

  for(int j=0; j<3; j++) // show values read from file
  cout << fnum[0][j] << " ";

  in.close();

  return 0;
}

如果数据类型对应关系错了,例如把a.astype(‘double‘).tofile("varr.data")改成a.astype(‘float).tofile("varr.data")`,C++中读取的数组将不再是原来的数组。需要特别注意。

原文地址:https://www.cnblogs.com/yaos/p/12105108.html

时间: 2024-08-29 08:56:07

C++读取保存为二进制的 numpy 数组的相关文章

numpy数组、向量、矩阵运算

可以来我的Github看原文,欢迎交流. https://github.com/AsuraDong/Blog/blob/master/Articles/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/numpy%E6%95%B0%E7%BB%84%E3%80%81%E5%90%91%E9%87%8F%E3%80%81%E7%9F%A9%E9%98%B5%E8%BF%90%E7%AE%97.md import numpy as np import pandas as pd

matlab读取内容为二进制的TXT文件

本方法同样适合读取十六进制和二进制以外的其他进制文件,txt使用一个最简单的命令就可以读取 textread 这是一个十分有用,简便的函数(对于fopen fscanf而言)读取二进制txt文件:假如txt文档中内容为0001 0010 0011 0100 1000,保存在pin.txt文档中使用a=textread('pin.txt','%s')'a =     '0001'    '0010'    '0011'    '0100'    '1000'可以看到数据保存为了char格式.使用b

Python numpy数组扩展效率问题

Numpy库的ndarray数组可以方便地进行各种多维数据处理工作 可是它最大的缺点就是不可动态扩展--"NumPy的数组没有这种动态改变大小的功能,numpy.append()函数每次都会重新分配整个数组,并把原来的数组复制到新数组中."(引用自http://blog.chinaunix.net/uid-23100982-id-3164530.html) 场景: 今天用ndarray处理 42000 条数据时,就遇到了数组扩展的效率问题 文件名:train.csv(后附下载) 文件大

NumPy数组基本的索引和切片

对一维数组来说,NumPy数组的索引切片与Python列表的功能差不多: >>> arr array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> arr[3] 3 >>> arr[2:6] array([2, 3, 4, 5]) >>> arr[3:] array([3, 4, 5, 6, 7, 8, 9]) 但是,特别注意的是,如果要将一个标量值赋值给一个切片,这个修改会直接反映到源数组上(即使你已经新建

数据分析(1) Numpy数组

Numpy的数组类被称作ndarray,通常被称作数组. 特点:元素类型相同,数量事先给定. 1 创建方式 (1)array( ):接收一个普通的Python序列(元组与列表并无区别),并将其转换为ndarray: # 使用列表创建 list1 = [1, 2, 3, 4, 5] print('使用一维列表创建:\n', np.array(list1)) list2 = [[1, 2, 3], [4, 5, 6]] print('使用二维列表创建:\n', np.array(list2)) #

numpy 数组对象

numpy 数组对象NumPy中的ndarray是一个多维数组对象,该对象由两部分组成:实际的数据,描述这些数据的元数据# eg_v1 import numpy as np a = np.arange(5) # 创建一个包含5个元素的NumPy数组a,取值分别为0~4的整数 print (a) # [0 1 2 3 4] print (a.dtype) # dtype 查看数组的数据类型 # int32 (数组a的数据类型为int32) # 确定数组的维度(数组的shape属性返回一个元组(tu

loadrunner 脚本开发-参数化之将内容保存为参数、参数数组及参数值获取

转自:http://blog.sina.com.cn/s/blog_13cc013b50102v49c.html(查看原文) 在VuGen中默认使用{}的字符串称为参数 注意:参数必须在双引号中才能用 将字符串保存为参数 lr_save_string("string you want to save", "arg_name"); 举例:用参数来替换需要打开的url链接 Action2() { lr_save_string("http://172.25.75

Java基础知识强化之IO流笔记27:FileInputStream读取数据一次一个字节数组byte[ ]

1. FileInputStream读取数据一次一个字节数组byte[ ]  使用FileInputStream一次读取一个字节数组: int read(byte[]  b) 返回值:返回值其实是实际读取的字节个数 . 2. 代码示例: 1 package com.himi.fileinputstream; 2 3 import java.io.FileInputStream; 4 import java.io.IOException; 5 6 7 8 /** 9 * 10 * 使用FileIn

numpy数组广播

numpy数组的广播功能强大,但是也同时让人疑惑不解,现在让我们来谈谈其中的原理. 广播原则: 如果两个数组的后缘维度(即:从末尾开始算起的维度)的轴长相符或其中一方的长度为1,则认为它们是广播兼容的,广播会在缺失和(或)长度为1的轴上进行. 上面的原则很重要,是广播的指导思想,下面我们来看看例子. 1.其实在最简单的数组与标量数字之间的运算就存在广播,只是我们把它看作理所当然了. 2.再看下一个例子,这个大家都会一致认为这是广播了 根据广播原则:arr1的shape为(4,1),arr2的sh