6

我遇到了一个问题,似乎答案很容易解释。我正在努力将我的数组元素转换为浮点数(以便我可以乘以,添加它们等)

import csv
import os
import glob
import numpy as np

def get_data(filename):
    with open(filename, 'r') as f:
        reader = csv.reader(f)                      
        return list(reader)

all_data = []

path=raw_input('What is the directory?')       
for infile in glob.glob(os.path.join(path, '*.csv')):
     all_data.extend(get_data(infile))
a = np.array(all_data)
current_track_data=a[0:,[8,9,10,11,12]]
abs_track_data=a[0:,7]

我得到了错误:

> --------------------------------------------------------------------------- ValueError                                Traceback (most recent call last) C:\Users\AClayton\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.0.3.1262.win-x86_64\lib\site-packages\IPython\utils\py3compat.pyc in execfile(fname, glob, loc)
    174             else:
    175                 filename = fname
--> 176             exec compile(scripttext, filename, 'exec') in glob, loc
    177     else:
    178         def execfile(fname, *where):
> 
> C:\Users\AClayton\Current\python begin\code_tester2.py in <module>()
>      18 for infile in glob.glob(os.path.join(path, '*.csv')): # performs loop for each file in the specified path with extension .csv
>      19      all_data.extend(get_data(infile))
> ---> 20      a = np.ndarray(all_data, dtype=float)
>      21 
>      22      current_track_data=a[0:,[8,9,10,11,12]]
> 
> ValueError: sequence too large; must be smaller than 32
4

1 回答 1

14

您的脚本与您发布的代码不同...正如您的错误回溯所示,在第 20 行中,您正在调用np.ndarray. 那是numpy 数组对象,而不是np.array 工厂函数。除非您非常清楚自己在做什么,否则请遵循文档建议并:

数组应使用array,zerosempty(请参阅下面的另请参阅部分)构造。ndarray(...)此处给出的参数是指用于实例化数组的低级方法 ( )。

因此,将您的第 20 行更改为:

 a = np.array(all_data, dtype=float)

你应该没事。

您遇到的错误是因为ndarray将您的第一个输入作为要创建的数组的形状。我的 Windows 系统上设置为 32 的维数有一个硬编码限制(可能取决于平台,不确定)。您的all_data列表有超过 32 个条目(或系统中的任何值),被误解为尺寸大小,这就是触发错误的原因。

于 2013-08-16T15:12:16.610 回答