我想从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。
答案 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;
}
。
概要分析,CPython v3.5.0,numpy v1.10.1。
(编辑注意:在Ubuntu 16.04,Intel i7 CPU,CPython v3.6.5,numpy v1.14.5上的结果顺序相同。)
bytes
结果
tobytes()