numpy用于数组的文件输入输出

numpy能否读写磁盘上的文本数据或二进制数据。

np.save和np.load

np.save和np.load是读写磁盘数组数据的两个主要函数。默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为.npy的文件中的。

In[1]:import numpy as np
In[2]:arr = np.arange(10)
In[3]:arr
Out[3]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In[4]:np.save('some_array',arr)

如果文件路径末尾没有扩展名.npy,则该扩展名会被自动加上。然后就可以通过np.load读取磁盘上的数组。

In [5]:np.load('some_array.npy')
Out[5]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

np.tofile和np.fromfile

使用数组对象的tofile()方法可以方便地将数组中的数据以二进制格式写进文件。tofile()输出的数据不保存数组形状和元素类型等信息。因此用fromfile()函数读回数据时需要用户指定元素类型,并对数组的形状进行适当的修改:

>>> a = np.arange(0,12)
>>> a.shape = 3,4
>>> a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> a.tofile("a.bin")
>>> b = np.fromfile("a.bin", dtype=np.float) # 按照float类型读入数据
>>> b # 读入的数据是错误的
array([  2.12199579e-314,   6.36598737e-314,   1.06099790e-313,
         1.48539705e-313,   1.90979621e-313,   2.33419537e-313])
>>> a.dtype # 查看a的dtype
dtype('int32')
>>> b = np.fromfile("a.bin", dtype=np.int32) # 按照int32类型读入数据
>>> b # 数据是一维的
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
>>> b.shape = 3, 4 # 按照a的shape修改b的shape
>>> b # 这次终于正确了
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

从上面的例子可以看出,在读入数据时需要正确设置dtype参数,并修改数组的shape属性才能得到和原始数据一致的结果。无论数据的排列顺序是C语言格式还是Fortran语言格式,tofile()都统一使用C语言格式输出。此外如果指定了sep参数,则fromfile()和tofile()将以文本格式对数组进行输入输出。sep参数指定的是文本数据中数值的分隔符。

np.savetxt和np.loadtxt

savetxt()和loadtxt()可以读写保存1维和2维数组的文本文件。例如可以用它们读写CSV格式的文本文件:

>>> a = np.arange(0,12,0.5).reshape(4,-1)
>>> np.savetxt("a.txt", a) # 缺省按照'%.18e'格式保存数值,以空格分隔
>>> np.loadtxt("a.txt")
array([[  0. ,   0.5,   1. ,   1.5,   2. ,   2.5],
       [  3. ,   3.5,   4. ,   4.5,   5. ,   5.5],
       [  6. ,   6.5,   7. ,   7.5,   8. ,   8.5],
       [  9. ,   9.5,  10. ,  10.5,  11. ,  11.5]])
>>> np.savetxt("a.txt", a, fmt="%d", delimiter=",") #改为保存为整数,以逗号分隔
>>> np.loadtxt("a.txt",delimiter=",") # 读入的时候也需要指定逗号分隔
array([[  0.,   0.,   1.,   1.,   2.,   2.],
       [  3.,   3.,   4.,   4.,   5.,   5.],
       [  6.,   6.,   7.,   7.,   8.,   8.],
       [  9.,   9.,  10.,  10.,  11.,  11.]])
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用循环来实现输入多组数据,具体实现方法如下: ```c++ #include <iostream> using namespace std; int main() { int n; cin >> n; // 输入数据组数 for (int i = 0; i < n; i++) { int m; cin >> m; // 输入每组数据的长度 int arr[m]; for (int j = 0; j < m; j++) { cin >> arr[j]; // 输入每组数据的元素 } // 处理每组数据 for (int j = 0; j < m; j++) { cout << arr[j] << " "; } cout << endl; } return 0; } ``` 在上面的代码中,首先输入了数据组数 `n`,然后使用一个循环遍历每一组数据。在遍历每一组数据时,先输入每组数据的长度 `m`,然后定义一个长度为 `m` 的数组 `arr`,再循环输入每组数据的元素。最后处理每组数据并输出。 ### 回答2: 要使用数组实现输入多组数据,我们可以按照以下步骤进行: 1. 创建一个二维数组,其中的每一行表示一组数据,每一列表示该组数据中的一个元素。 2. 设定输入的组数,可以通过用户输入或者其他方式确定。 3. 创建一个循环,该循环的次数等于输入的组数。 4. 在循环中,为每一组数据的每个元素逐个赋值。 5. 在赋值过程中,可以通过获取用户输入、从文件中读取数据等方式获取每个元素的值。 6. 将每一组数据存储到二维数组的对应行中。 7. 循环结束后,可以通过遍历二维数组,逐个输出每一组数据。 下面是一个示例代码,以数组实现输入两组数据并输出的情况: ```python import numpy as np # 创建一个空的二维数组,用来存储输入的多组数据 array = np.empty((2, 3), dtype=int) # 输入组数 groups = 2 # 通过循环为每一组数据的每个元素逐个赋值 for i in range(groups): print("请输入第{}组数据:".format(i+1)) for j in range(3): # 获取用户输入 value = int(input("请输入第{}个元素的值:".format(j+1))) array[i][j] = value # 输出每一组数据 for i in range(groups): print("第{}组数据:".format(i+1)) for j in range(3): # 遍历二维数组,输出每个元素的值 print(array[i][j]) ``` 通过以上步骤,我们可以使用数组实现输入多组数据,并按照需要对这些数据进行处理和输出。 ### 回答3: 要使用数组实现输入多组数据,可以采取以下步骤: 1. 首先,确定变量容纳数据的数组的大小。根据需要输入的多组数据的个数和每组数据元素的数量,创建一个二维数组,例如arr[m][n],其中m表示多组数据的个数,n表示每组数据的元素数量。 2. 接下来,使用循环结构,循环读取每组数据的元素。可以使用嵌套的for循环,外层循环用于遍历多组数据的索引,内层循环用于读取每组数据的元素。 3. 在循环中调用输入函数,如scanf(),根据需求输入数据的类型,读取元素的值,并将其存储到数组的相应位置上。 例如,使用scanf("%d", &arr[i][j]),表示读取整数,并将其存储到数组的第i组数据的第j个元素位置上。 4. 在循环结束后,即完成所有输入,可以通过访问数组的方式来查看每组数据的值。 下面是一个示例代码,用于演示如何使用数组实现输入多组数据: ``` #include <stdio.h> int main() { int m, n; printf("请输入多组数据的个数m和每组数据的元素数量n:"); scanf("%d %d", &m, &n); int arr[m][n]; for (int i = 0; i < m; i++) { printf("请输入第%d组数据的%d个元素:", i + 1, n); for (int j = 0; j < n; j++) { scanf("%d", &arr[i][j]); } } printf("输入的多组数据为:\n"); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { printf("%d ", arr[i][j]); } printf("\n"); } return 0; } ``` 使用该示例代码,可以按照提示输入多组数据,并将其存储到二维数组中。最后,输出输入的多组数据以验证输入是否正确。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值