【问题标题】:Bypass "Array is too big" python error绕过“数组太大”python错误
【发布时间】:2013-06-26 17:47:46
【问题描述】:

我有一个 csv 文件,其中包含超过 200 000 行气象数据。当我想用matplotlib对数据建模时,出现这个错误:

Traceback (most recent call last):
  File "try4.py", line 19, in <module>
    X,Y = meshgrid( data_x,data_y )   
  File "C:\Python27\lib\site-packages\numpy\lib\function_base.py", line 3378, in  meshgrid
    mult_fact = np.ones(shape, dtype=int)   
  File "C:\Python27\lib\site-packages\numpy\core\numeric.py", line 148, in ones
    a = empty(shape, dtype, order) 
  ValueError: array is too big.

我发现可以处理最大 5000 行的文件。 如何绕过错误以处理 200000 行的所有文件? 这是我的代码:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
from pylab import *


# read CSV as a numpy array
data = mlab.csv2rec('datasets/mix.csv')

# print CSV file headers
print data.dtype.names

# load columns as vectors
data_x = data['longitude']
data_y = data['latitude']
data_u = data['x']
data_v = data['y']

X,Y = meshgrid( data_x,data_y )
U = cos(data_u)
V = sin(data_v)


# plot raw data
Q = quiver( X, Y, U, V, units='width')
qk = quiverkey(Q, 0.5, 0.92, 2, '.', labelpos='W',
               fontproperties={'weight': 'bold'})
title('Current Surface')

plt.show()

【问题讨论】:

  • 数组元素是什么样的?这个答案:stackoverflow.com/questions/13652650/… 似乎认为没有明显的数组限制(如果是这样,至少有 1m+ 个元素)
  • @ydaetskcoR 这是一个例子 //headers X, Y, Latitude, Longitude, VOGRD_201304100000 //data 292, 1, 0.000000, -50.530000, 0 ...and 200 000 other lines like that
  • 您能提供更多信息吗?您正在使用哪个matplotlib 电话等
  • @tiago 我导入了 numpy、pyplot、mlab 和 pyplat。我想绘制当前表面的数据,以便捕捉 x、y、纬度和经度,并使用 quiver 的函数对其进行操作。
  • 请给我们看一些代码。我们不确定您在做什么会导致这种情况。

标签: python numpy matplotlib


【解决方案1】:

为什么你使用meshgrid (doc)?它很好地生成了一个 200k x 200k 的数组,该数组与您的 uv 数据的尺寸不匹配。我想你想这样做

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
from pylab import *


# read CSV as a numpy array
data = mlab.csv2rec('datasets/mix.csv')

# print CSV file headers
print data.dtype.names

# load columns as vectors
data_x = data['longitude']
data_y = data['latitude']
data_u = data['x']
data_v = data['y']

U = cos(data_u)
V = sin(data_v)


# plot raw data
Q = quiver(data_x, data_y, U, V, units='width')
qk = quiverkey(Q, 0.5, 0.92, 2, '.', labelpos='W',
               fontproperties={'weight': 'bold'})
title('Current Surface')

【讨论】:

    猜你喜欢
    • 2015-12-05
    • 2012-12-20
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    相关资源
    最近更新 更多