Python:如何在Python中处理预期的可读缓冲区对象
我对python非常熟悉,正在编写一个python脚本,该脚本是我从与我一起工作的人那里继承的,我遇到了以下错误:Python:如何在Python中处理预期的可读缓冲区对象,python,numpy,Python,Numpy,我对python非常熟悉,正在编写一个python脚本,该脚本是我从与我一起工作的人那里继承的,我遇到了以下错误: expected a readable buffer object 导致这种情况的代码是: self.y_NoShock_data = np.zeros((self.a_count+1,1,self.numberOfTags+1,lookback+forward,),dtype=enums. self.y_data = np.zeros((self.a_count+1,l
expected a readable buffer object
导致这种情况的代码是:
self.y_NoShock_data = np.zeros((self.a_count+1,1,self.numberOfTags+1,lookback+forward,),dtype=enums.
self.y_data = np.zeros((self.a_count+1,len(self.SCL)+1,self.numberOfTags+1,lookback+forward,),dtype=enums.DataPoints)
self.y_NoShock_cum_data = np.zeros_like(self.y_NoShock_data)
self.y_cum_data = np.zeros_like(self.y_data)
enums.DataPoints如下所示:
enums.DataPoints = dtype([
('Amount','float32'),
])
堆栈跟踪如下所示:
Internal Server
Error: /smCore/entity/1/runScenarioManager/
Traceback (most recent call last):
File "/Library/Python/2.7/site-packages/django/core/handlers/base.py", line 115, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "/Users/bentaliadoros/Documents/workspace/LivingSvnAmmar/trunk/ScenarioManagerStandAlone/smCore/views/createScenario.py", line 445, in runScenarioManager
a = ScenarioExecutionController(sEA)
File "/Users/bentaliadoros/Documents/workspace/LivingSvnAmmar/trunk/ScenarioManagerStandAlone/smCore/models/scenarioExecutionController.py", line 176, in __init__
shockEventDataSet=[], lookback=self.lookback, forward=self.forward, period=self.period) #,
File "/Users/bentaliadoros/Documents/workspace/LivingSvnAmmar/trunk/ScenarioManagerStandAlone/smCore/models/scenarioExecution.py", line 307, in buildSeedScenarioObject
cls.updateScenarioParameters(shockContainerList,shockEventDataSet, shockEventDateList)
File "/Users/bentaliadoros/Documents/workspace/LivingSvnAmmar/trunk/ScenarioManagerStandAlone/smCore/models/scenarioExecution.py", line 130, in updateScenarioParameters
self.initialiseResultArrays()
File "/Users/bentaliadoros/Documents/workspace/LivingSvnAmmar/trunk/ScenarioManagerStandAlone/smCore/models/scenarioExecution.py", line 154, in initialiseResultArrays
self.y_NoShock_cum_data = np.zeros_like(self.y_NoShock_data,dtype=enums.DataPoints)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/core/numeric.py", line 116, in zeros_like
res.fill(0)
TypeError: expected a readable buffer object
他在电脑上工作,我在Mac上工作。
我一直在四处寻找,但找不到解决方案,有人能告诉我正确的方向吗?如果不知道枚举.DataPointsdtype对象是什么样子,很难做出响应,但我将尝试解释您在哪里看到错误消息 当您试图将数组的某个元素设置为与其数据类型不正确对齐的值时,您将看到以下情况。以下是一个例子:
In [133]: data = np.zeros((3,2), dtype="int, int")
In [134]: data
Out[134]:
array([[(0, 0), (0, 0)],
[(0, 0), (0, 0)],
[(0, 0), (0, 0)]],
dtype=[('f0', '<i8'), ('f1', '<i8')])
In [135]: data[0, 0]
Out[135]: (0, 0)
In [136]: data[0, 0] = [1,2]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-136-399e78675be4> in <module>()
----> 1 data[0, 0] = [1,2]
TypeError: expected a readable buffer object
[133]中的:data=np.zero((3,2),dtype=“int,int”)
In[134]:数据
出[134]:
数组([(0,0),(0,0)],
[(0, 0), (0, 0)],
[(0, 0), (0, 0)]],
dtype=[('f0','这个问题的答案是,正如@askewchan在对其答案的评论中指出的那样,我并不是在同事们使用的同一版本的Numpy下工作的
- 失败:numpy 1.6.1
- 作品:numpy 1.7
- 作品:numpy 1.8.0
什么是enums.DataPoints
?回溯中的代码与您发布的代码不匹配。在回溯中,指定了dtype
(正如@Jaime所询问的),但不是在您发布的顶部代码中。请确保已保存(如果是交互式的,请重新加载)如果您进行了更改,请访问您的源文件。我添加了enums.DataPoints,感谢此错误导致的结果:\u p=np.empty(1,dtype=[('p',np.uint16),('pr',np.uint16)]
然后\u p[:]=1
,但这不是:\u p=np.empty(2,dtype=[('p',np.uint16),('pr',np.uint16)]
然后\u p[]=1,在我看来像一个bug(8.2)代码在我同事的计算机(Windows 7)上运行良好。从askewchan的回答来看,我不清楚为什么会出现这个问题,特别是因为我们使用的是numpy.zeros_like()--从文档中可以看出,这基本上可以复制之前的数组?是的,它在我的计算机上运行良好(python 2.7,numpy 1.7)同样,现在我已经设置了你添加的数据点。你运行的是哪个版本的numpy/python?我使用的是numpy 1.6.1版和python 2.7.2版。对于这个帮助,我发现我的numpy已经过时,我更新到了1.8.0,错误现在消失了。谢谢创建,@Ben。如果这回答了你的问题,请接受我的或添加你自己的,接受它,把问题标记为已回答。谢谢!
In [137]: data[0,0] = (1,2)
In [138]: data
Out[138]:
array([[(1, 2), (0, 0)],
[(0, 0), (0, 0)],
[(0, 0), (0, 0)]],
dtype=[('f0', '<i8'), ('f1', '<i8')])