NumPy frombuffer和fromstring的区别是什么

NumPy frombuffer和fromstring的区别是什么

在NumPy中,我们经常需要将Python的字符串或二进制数据转换为NumPy数组。这时候,我们就可以使用NumPy中的fromstring和frombuffer两个函数来完成操作。虽然这两个函数都可以将字符串或者二进制数据转换成NumPy数组,但是它们之间存在一些小差别。在这篇文章中,我们将详细探讨这两个函数所存在的区别。

阅读更多:Numpy 教程

fromstring和frombuffer的语法

在开始介绍两者之间的区别之前,我们先来了解一下它们的语法。

fromstring

numpy.fromstring(string, dtype=float, count=-1, sep='')

这个函数可以把字符串解析成一个NumPy数组,其中:

  • string: 需要被解析成数组的字符串,必须为字符串类型。
  • dtype : 返回数组的数据类型,默认为 float。
  • count : 解析多少个数据并形成数组,默认为 -1,表示解析全部数据。
  • sep : 分隔符,用于将输入字符串分解成多个元素,缺省的分隔符为空格符。

例如:

import numpy as np
string = '1 2 3 4 5'
np.fromstring(string, sep=' ')

这个例子中,fromstring函数将字符串'1 2 3 4 5'以空格分隔符拆开,然后转换为NumPy数组。

frombuffer

numpy.frombuffer(buffer, dtype=float, count=-1, offset=0)

上述函数可以将二进制数据(比如Python内置的bytes对象)变成NumPy数组,其中:

  • buffer : 需要被转换成数组的二进制数据,必须为buffer类型,也就是bytearray, bytes, memoryview。
  • dtype : 返回数组的数据类型,默认为float。
  • count : 解析多少个数据并形成数组,默认为 -1,表示解析全部数据。
  • offset : 该参数表示数据在buffer中的起始位置,默认为0。

例如:

import numpy as np
data = bytearray(b'hello numpy')
np.frombuffer(data, dtype='S1')

这个例子中,frombuffer函数将bytearray类型的数据转换为NumPy数组。

fromstring和frombuffer的区别

从语法可以看出,frombuffer和fromstring的主要区别在于输入的数据类型不同。

  • fromstring的输入是字符串,是一种Unicode类型数据。
  • frombuffer的输入是二进制数据(bytes类型),是一种字节类型数据。

在从字符串转换为二进制数据时,不同的编码产生的二进制数据是不同的。所以,如果input本身是一段ASCII数据,那么就可以使用该字符串直接进行fromstring转换;但如果字符串采用的是其他编码,则需要相应对数据进行编码和解码,以保证正确的数据转换。

此外,frombuffer还支持memoryview类型,这是Python3.x中支持的新类型,可以直接对内存进行访问,有助于提高程序的效率,例如:

import numpy as np
arr = np.arange(10)
memory = memoryview(arr)
np.frombuffer(memory, dtype=int)

这个例子中,frombuffer函数直接从memoryview类型的变量memory中读取数据并转化为NumPy数组。

总结

NumPy中的fromstring和frombuffer函数都能帮我们把一些数据转化为NumPy数组,不同的是,它们所接受的输入类型不同,需要在使用时注意区分。frombuffer还支持memoryview类型,可以很好地提高程序的执行效率。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程