0

我有以下代码行:

import numpy as np
data = np.genfromtxt(path...,delimiter=',',dtype=None)

这将返回一个列表数组。有没有一种简单的方法可以从 csv 中获取矩阵,以便我可以使用 data[:,:3] 之类的操作来获取矩阵的前 3 列?

我尝试 (data[1])[:3] 获取第二行的前 3 个条目,但出现以下错误:

无效索引

我真的很困惑,因为如果我只是从文件中复制第二行然后执行 (copydata)[:3] 事情就可以了。

所以我的问题是两部分:

  1. 我可以将 csv(带有字符串和数字)作为数组导入吗?
  2. 为什么 (data[1])[:3] 返回无效索引
4

2 回答 2

1

所以这是1的答案

import numpy as np
data = np.genfromtxt(path...,delimiter=',',dtype=None)

data = []  
with open(path,'rb') as file:
    reader = csv.reader(file)
    for row in reader:
        data[len(data):] = [row]

data = np.array(data)

但我仍然对第 2 部分感到恼火

于 2013-10-12T01:24:55.210 回答
0

你的数据是什么样的?也许你应该使用 np.loadtxt()。
CSV 文件:

0,1,2,3,4,5,6,7,8,9
10,11,12,13,14,15,16,17,18,19
20,21,22,23,24,25,26,27,28,29
30,31,32,33,34,35,36,37,38,39
40,41,42,43,44,45,46,47,48,49
50,51,52,53,54,55,56,57,58,59
60,61,62,63,64,65,66,67,68,69
70,71,72,73,74,75,76,77,78,79
80,81,82,83,84,85,86,87,88,89
90,91,92,93,94,95,96,97,98,99

加载到数组中并对其进行索引:

>>> a = np.loadtxt('data.csv', delimiter = ',')
>>> a
array([[  0.,   1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.],
       [ 10.,  11.,  12.,  13.,  14.,  15.,  16.,  17.,  18.,  19.],
       [ 20.,  21.,  22.,  23.,  24.,  25.,  26.,  27.,  28.,  29.],
       [ 30.,  31.,  32.,  33.,  34.,  35.,  36.,  37.,  38.,  39.],
       [ 40.,  41.,  42.,  43.,  44.,  45.,  46.,  47.,  48.,  49.],
       [ 50.,  51.,  52.,  53.,  54.,  55.,  56.,  57.,  58.,  59.],
       [ 60.,  61.,  62.,  63.,  64.,  65.,  66.,  67.,  68.,  69.],
       [ 70.,  71.,  72.,  73.,  74.,  75.,  76.,  77.,  78.,  79.],
       [ 80.,  81.,  82.,  83.,  84.,  85.,  86.,  87.,  88.,  89.],
       [ 90.,  91.,  92.,  93.,  94.,  95.,  96.,  97.,  98.,  99.]])
>>> a[1]
array([ 10.,  11.,  12.,  13.,  14.,  15.,  16.,  17.,  18.,  19.])
>>> a[1][:3]
array([ 10.,  11.,  12.])
>>> a[1,:3]
array([ 10.,  11.,  12.])
>>> 
于 2013-10-15T00:30:14.023 回答