使用NumPy从文件中读取值并放入二维数组,但在列和行上得到奇怪的结果

2024-06-11 07:29:08 发布

您现在位置:Python中文网/ 问答频道 /正文

问题是,对于我的(行,列)元组,我得到了一个奇怪的结果:(2,)

这是我第一次使用NumPy,并注意到我得到的结果根本不是我想要的(这不是我真正得到的,因为很长时间以来,我刚刚删除了一些条目):

[['5.9', '3.0', '5.1', '1.8', 'Iris-virginica']
 array([['6.2', '3.4', '5.4', '2.3', 'Iris-virginica'],
       array([['4.7', '3.2', '1.3', '0.2', 'Iris-setosa'],
       array([['4.9', '3.0', '1.4', '0.2', 'Iris-setosa'],...
      dtype='|S11')], dtype=object)], dtype=object)], dtype=object)], dtype=object)], dtype=object)], dtype=object)], dtype=object)], dtype=object)], dtype=object)], dtype=object)], dtype=object)], ...

我想要的结果看起来更像这样:

[['5.9','3.0','5.1','1.8','Iris virginica'], ['6.2','3.4','5.4','2.3',鸢尾花',。。在

我不明白我到底做错了什么。但我很肯定,如果第一个错误被修复,它也会修复我所遇到的第二个错误。以下是我的全部代码:

^{pr2}$

Tags: 代码numpyirisobject错误条目array元组
2条回答

问题是你一直在创建一个数组并把它添加到一个列表中。最好构建列表,并在末尾创建一次数组:

# linelist = []   # doesn't do anything useful
# data = np.array([])
#dimensions are num_ lines and the elements
alist = []
while(line!= ""):
    linelist = line.split(',')
    actuallist = []
    for elem in linelist:
        if (elem.count("\n")>0):
            elem = elem.rstrip()
            actuallist.append(elem)
        else:
            actuallist.append(elem)
    line = infile.readline()
    alist.append(actuallist)
data = np.array(alist)       # make array from list of lists

data中使用它之前,print(alist)可能会有帮助,以确保它是有意义的。在

使用numpy的内置np.loadtxt函数可以很容易地解决这个问题。(docs here

np.loadtxt('~/Downloads/iris.txt', delimiter=',',
           dtype={'names': ('col0', 'col1', 'col2', 'col3', 'col4'),
                  'formats': (float, float, float, float, '|S30')})

相关问题 更多 >