numpy.getbuffer导致AttributeError:'module'对象没有属性'getbuffer'

时间:2014-02-17 04:55:03

标签: python python-3.x numpy

我想从Python 3中的numpy数组中获取缓冲区。 我找到了以下代码:

$ python3
Python 3.2.3 (default, Sep 25 2013, 18:25:56) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> a = numpy.arange(10)
>>> numpy.getbuffer(a)

然而,它会在最后一步产生错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'getbuffer'

为什么我做错了? 该代码适用于Python 2。 我正在使用的numpy版本是1.6.1。

2 个答案:

答案 0 :(得分:6)

根据Developer notes on the transition to Python 3

  

PyBuffer(对象)

     

由于Py3中有一个本机缓冲区对象,memoryview,   在Py3 中从多个阵列中删除了newbuffer getbuffer函数:   它们的功能由新的memoryview对象接管。

>>> import numpy
>>> a = numpy.arange(10)
>>> memoryview(a)
<memory at 0xb60ae094>
>>> m = _
>>> m[0] = 9
>>> a
array([9, 1, 2, 3, 4, 5, 6, 7, 8, 9])

答案 1 :(得分:4)

在返回List<NameAddrmark>对象时,Numpy的arr.tobytes()似乎明显快于bytes(memoryview(arr))。 所以,您可能也希望看一下public List<NameAddrmark> GetNameRespCommentData(string respid) { List<NameAddrmark> cmsList = new List<NameAddrmark>(); SqlConnection connection = new SqlConnection(""); string sql = "SELECT top 2 * FROM dbo.RESPONDENT_COMMENT WHERE respid = " + GeneralData.AddSqlQuotes(respid) + " and USRNME = " + GeneralData.AddSqlQuotes(UserInfo.UserName) + " order by COMMDATE ASC"; SqlCommand command = new SqlCommand(sql, connection); try { connection.Open(); SqlDataReader reader = command.ExecuteReader(CommandBehavior.SingleResult); while (reader.Read()) { NameAddrmark cms = new NameAddrmark(); cms.Id = respid; cms.Date8 = reader["COMMDATE"].ToString(); cms.Usrnme = reader["USRNME"].ToString(); cms.Marktext = reader["COMMTEXT"].ToString(); cmsList.Add(cms); } } catch (SqlException ex) { throw ex; } finally { connection.Close(); } return cmsList; }

英特尔i7 CPU上的Windows 7

概要分析,CPython v3.5.0,numpy v1.10.1。

编辑注意:在Ubuntu 16.04,Intel i7 CPU,CPython v3.6.5,numpy v1.14.5上的结果顺序相同。)

bytes

结果

tobytes()