我有一个像这样组织的CSV文件:
1, 2, 3, 4
5, 6, 7, 8
9, 10, 11, 12
使用numpy我在变量 x 中使用 genfromtxt 存储文件。因此x的每一行都是CSV文件的一行,而x是一个ndarray对象。
我想绘制数据如此:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
为了澄清数据当前正在绘制如(0,1)和(0,5),因为每一行都是一个新数组,索引会在每个新行的开头重置。
我想绘制它,所以点数是(0,1)和(4,5),而不是
我的尝试是在for循环中追加或连接行,但似乎ndarray类型没有这些方法。
感谢您的阅读!
答案 0 :(得分:0)
使用csv
模块和双列表理解,您可以非常简单地构建一个numpy数组:
with open("input.csv") as f:
cr = csv.reader(f)
vector = np.array([int(x) for row in cr for x in row])
让我们打印vector
:
[ 1 2 3 4 5 6 7 8 9 10 11 12]
答案 1 :(得分:0)
使用行列表模拟csv文件:
In [1]: txt=b"""1, 2, 3, 4
...: 5, 6, 7, 8
...: 9, 10, 11, 12"""
In [2]: txt = txt.splitlines()
In [3]: txt
Out[3]: [b'1, 2, 3, 4', b'5, 6, 7, 8', b'9, 10, 11, 12']
加载genfromtxt
我得到一个二维数组
In [4]: x = np.genfromtxt(txt, delimiter=',', dtype=int)
In [5]: x
Out[5]:
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
In [6]: x.shape
Out[6]: (3, 4)
这样的数组可以很容易地重新整形为flat
1d数组:
In [7]: x1 = x.ravel()
In [8]: x1
Out[8]: array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
In [9]: x.reshape(12)
Out[9]: array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
反过来也很简单:
创建一个具有相同值的1d数组,并将其重新整形为(3,4)数组(或(4,3)或(2,6)等):
In [10]: y = np.arange(1,13)
In [11]: y
Out[11]: array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
In [12]: y.reshape(3,4)
Out[12]:
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])