如何正确定义numpy数据类型

如何正确定义numpy数据类型,numpy,Numpy,我有这样一段代码,我尝试从csv文件加载四列 import numpy as np rtype = np.dtype([('1', np.float), ('2', np.float), ('3', np.float), ('tier', np.str, 32)]) x1, x2, x3, x4 = np.genfromtxt("../Data/out.txt", dtype=rtype, skip_header=1, delimiter=",", usecols=(3, 4, 5, 6), u

我有这样一段代码,我尝试从
csv
文件加载四列

import numpy as np
rtype = np.dtype([('1', np.float), ('2', np.float), ('3', np.float), ('tier', np.str, 32)])
x1, x2, x3, x4 = np.genfromtxt("../Data/out.txt", dtype=rtype, skip_header=1, delimiter=",", usecols=(3, 4, 5, 6), unpack=True)
但我有一个错误:

ValueError: too many values to unpack (expected 4)
这有点奇怪,因为我有四个变量并加载四列

如何正确加载它们?
嗯,问题出在
np.dtype
中,因为没有它,一切都可以正常工作(尽管有其他类型)。我使用python3。

看起来您的文本如下:

In [447]: txt=b"""1.2 3.3 2.0 str
     ...: 3.3 3.3 2.2 astring
     ...: """
我的第一个选择是
genfromtxt
,其中
dtype=None
(自动确定数据类型):

我不太使用
unpack
,而是使用一个2d或结构化数组。但对于解包:

In [450]: x1,x2,x3,x4=np.genfromtxt(txt.splitlines(),unpack=True)
In [451]: x1
Out[451]: array([ 1.2,  3.3])
In [452]: x4
Out[452]: array([ nan,  nan])
我仍然得到字符串列的
nan

dtype=None
案例中借用数据类型:

In [456]: dt=np.dtype([('f0', '<f8'), ('f1', '<f8'), ('f2', '<f8'), ('f3', 'S7')])
In [457]: dt
Out[457]: dtype([('f0', '<f8'), ('f1', '<f8'), ('f2', '<f8'), ('f3', 'S7')])
In [458]: np.genfromtxt(txt.splitlines(),unpack=True,dtype=dt)
Out[458]: 
array([(1.2, 3.3, 2.0, b'str'), (3.3, 3.3, 2.2, b'astring')], 
      dtype=[('f0', '<f8'), ('f1', '<f8'), ('f2', '<f8'), ('f3', 'S7')])
In [459]: _.shape
Out[459]: (2,)
然后加载字符串列,其中
dtype=None
S32

In [466]: x4=np.genfromtxt(txt.splitlines(),unpack=True,usecols=[3],dtype=None)
In [467]: x4
Out[467]: 
array([b'str', b'astring'], 
      dtype='|S7')
另一个选项是加载结构化数组,并单独解压缩字段

In [468]: data = np.genfromtxt(txt.splitlines(),dtype=None)
In [469]: data.dtype
Out[469]: dtype([('f0', '<f8'), ('f1', '<f8'), ('f2', '<f8'), ('f3', 'S7')])
In [470]: x1, x2, x3 = data['f0'],data['f1'],data['f2']
In [471]: x4 = data['f3']
In [472]: x4
Out[472]: 
array([b'str', b'astring'], 
      dtype='|S7')

然后,在继续使用
数据
数组之前,请确保您了解该形状和数据类型。

正确加载
x4
dtype
是什么?
dtype=None
有什么作用?
unpack=True
不适用于
dtype=None
In [462]: x1,x2,x3=np.genfromtxt(txt.splitlines(),unpack=True,usecols=[0,1,2])
In [463]: x3
Out[463]: array([ 2. ,  2.2])
In [466]: x4=np.genfromtxt(txt.splitlines(),unpack=True,usecols=[3],dtype=None)
In [467]: x4
Out[467]: 
array([b'str', b'astring'], 
      dtype='|S7')
In [468]: data = np.genfromtxt(txt.splitlines(),dtype=None)
In [469]: data.dtype
Out[469]: dtype([('f0', '<f8'), ('f1', '<f8'), ('f2', '<f8'), ('f3', 'S7')])
In [470]: x1, x2, x3 = data['f0'],data['f1'],data['f2']
In [471]: x4 = data['f3']
In [472]: x4
Out[472]: 
array([b'str', b'astring'], 
      dtype='|S7')
data = np.genfromtxt(...)
print(data.shape)
print(data.dtype)