Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy';s genfromtxt根据数据类型参数返回不同的结构化数据_Python_Numpy_Genfromtxt - Fatal编程技术网

Python Numpy';s genfromtxt根据数据类型参数返回不同的结构化数据

Python Numpy';s genfromtxt根据数据类型参数返回不同的结构化数据,python,numpy,genfromtxt,Python,Numpy,Genfromtxt,我有以下资料: from numpy import genfromtxt seg_data1 = genfromtxt('./datasets/segmentation.all', delimiter=',', dtype="|S5") seg_data2 = genfromtxt('./datasets/segmentation.all', delimiter=',', dtype=["|S5"] + ["float" for n in range(19)]) print seg_d

我有以下资料:

from numpy import genfromtxt    
seg_data1 = genfromtxt('./datasets/segmentation.all', delimiter=',', dtype="|S5")
seg_data2 = genfromtxt('./datasets/segmentation.all', delimiter=',', dtype=["|S5"] + ["float" for n in range(19)])

print seg_data1
print seg_data2

print seg_data1[:,0:1]
print seg_data2[:,0:1]
事实证明,
seg_data1
seg_data2
不是同一种结构。以下是打印的内容:

[['BRICK' '140.0' '125.0' ..., '7.777' '0.545' '-1.12']
 ['BRICK' '188.0' '133.0' ..., '8.444' '0.538' '-0.92']
 ['BRICK' '105.0' '139.0' ..., '7.555' '0.532' '-0.96']
 ..., 
 ['CEMEN' '128.0' '161.0' ..., '10.88' '0.540' '-1.99']
 ['CEMEN' '150.0' '158.0' ..., '12.22' '0.503' '-1.94']
 ['CEMEN' '124.0' '162.0' ..., '14.55' '0.479' '-2.02']]
[ ('BRICK', 140.0, 125.0, 9.0, 0.0, 0.0, 0.2777779, 0.06296301, 0.66666675, 0.31111118, 6.185185, 7.3333335, 7.6666665, 3.5555556, 3.4444444, 4.4444447, -7.888889, 7.7777777, 0.5456349, -1.1218182)
 ('BRICK', 188.0, 133.0, 9.0, 0.0, 0.0, 0.33333334, 0.26666674, 0.5, 0.077777736, 6.6666665, 8.333334, 7.7777777, 3.8888888, 5.0, 3.3333333, -8.333333, 8.444445, 0.53858024, -0.92481726)
 ('BRICK', 105.0, 139.0, 9.0, 0.0, 0.0, 0.27777782, 0.107407436, 0.83333325, 0.52222216, 6.111111, 7.5555553, 7.2222223, 3.5555556, 4.3333335, 3.3333333, -7.6666665, 7.5555553, 0.5326279, -0.96594584)
 ...,
 ('CEMEN', 128.0, 161.0, 9.0, 0.0, 0.0, 0.55555534, 0.25185192, 0.77777785, 0.16296278, 7.148148, 5.5555553, 10.888889, 5.0, -4.7777777, 11.222222, -6.4444447, 10.888889, 0.5409177, -1.9963073)
 ('CEMEN', 150.0, 158.0, 9.0, 0.0, 0.0, 2.166667, 1.6333338, 1.388889, 0.41851807, 8.444445, 7.0, 12.222222, 6.111111, -4.3333335, 11.333333, -7.0, 12.222222, 0.50308645, -1.9434487)
 ('CEMEN', 124.0, 162.0, 9.0, 0.11111111, 0.0, 1.3888888, 1.1296295, 2.0, 0.8888891, 10.037037, 8.0, 14.555555, 7.5555553, -6.111111, 13.555555, -7.4444447, 14.555555, 0.4799313, -2.0293121)]
[['BRICK']
 ['BRICK']
 ['BRICK']
 ..., 
 ['CEMEN']
 ['CEMEN']
 ['CEMEN']]
Traceback (most recent call last):
  File "segmentationdata.py", line 14, in <module>
    print seg_data2[:,0:1]
IndexError: too many indices for array
对于
seg_数据2
。现在我可以做
data.astype(float)
但问题是,当我给它
dtype
数组时,
dtype=“|S5”
你将所有列作为字符串(5个字符)导入时,这不就是
genfromtxt
应该做的吗。结果是一个二维数组,其行如下所示

['BRICK' '140.0' '125.0' ..., '7.777' '0.545' '-1.12']
使用
dtype=[“| S5”]+[“float”表示范围(19)]
为每列指定数据类型,结果是一个结构化数组。它是1d,包含20个字段。您可以按名称(查看
set\u data2.dtype
)而不是按列号访问字段

此数组的元素或记录显示为元组,包括一个字符串和19个浮点数:

('BRICK', 140.0, 125.0, 9.0, 0.0, 0.0, 0.2777779, 0.06296301, 0.66666675, 0.31111118, 6.185185, 7.3333335, 7.6666665, 3.5555556, 3.4444444, 4.4444447, -7.888889, 7.7777777, 0.5456349, -1.1218182)
#初始字符列

print set_data2['f0']  
指定
dtype=None
应该会产生相同的结果,可能会产生一些整数列,而不是所有浮点

还可以使用两个字段指定
dtype
,一个是字符串列,另一个是19个浮动。我必须检查文档并运行一些测试用例来确定格式

我认为您已经阅读了足够多的
genfromtxt
文档,可以指定一个复合数据类型,但还不足以理解结果

=================

使用文本和数字导入csv的示例:

In [139]: txt=b"""one 1 2 3
     ...: two 4 5 6
     ...: """
默认值:所有浮动

In [140]: np.genfromtxt(txt.splitlines())
Out[140]: 
array([[ nan,   1.,   2.,   3.],
       [ nan,   4.,   5.,   6.]])
自动数据类型选择-4个字段

In [141]: np.genfromtxt(txt.splitlines(),dtype=None)
Out[141]: 
array([(b'one', 1, 2, 3), (b'two', 4, 5, 6)], 
      dtype=[('f0', 'S3'), ('f1', '<i4'), ('f2', '<i4'), ('f3', '<i4')])
使用
dtype=“|S5”
可以将所有列作为字符串(5个字符)导入。结果是一个二维数组,其行如下所示

['BRICK' '140.0' '125.0' ..., '7.777' '0.545' '-1.12']
使用
dtype=[“| S5”]+[“float”表示范围(19)]
为每列指定数据类型,结果是一个结构化数组。它是1d,包含20个字段。您可以按名称(查看
set\u data2.dtype
)而不是按列号访问字段

此数组的元素或记录显示为元组,包括一个字符串和19个浮点数:

('BRICK', 140.0, 125.0, 9.0, 0.0, 0.0, 0.2777779, 0.06296301, 0.66666675, 0.31111118, 6.185185, 7.3333335, 7.6666665, 3.5555556, 3.4444444, 4.4444447, -7.888889, 7.7777777, 0.5456349, -1.1218182)
#初始字符列

print set_data2['f0']  
指定
dtype=None
应该会产生相同的结果,可能会产生一些整数列,而不是所有浮点

还可以使用两个字段指定
dtype
,一个是字符串列,另一个是19个浮动。我必须检查文档并运行一些测试用例来确定格式

我认为您已经阅读了足够多的
genfromtxt
文档,可以指定一个复合数据类型,但还不足以理解结果

=================

使用文本和数字导入csv的示例:

In [139]: txt=b"""one 1 2 3
     ...: two 4 5 6
     ...: """
默认值:所有浮动

In [140]: np.genfromtxt(txt.splitlines())
Out[140]: 
array([[ nan,   1.,   2.,   3.],
       [ nan,   4.,   5.,   6.]])
自动数据类型选择-4个字段

In [141]: np.genfromtxt(txt.splitlines(),dtype=None)
Out[141]: 
array([(b'one', 1, 2, 3), (b'two', 4, 5, 6)], 
      dtype=[('f0', 'S3'), ('f1', '<i4'), ('f2', '<i4'), ('f3', '<i4')])

[“|S5”]+[“float”表示范围(19)中的n]
假设为数据类型表示什么?我不太明白您想做什么。您的意思是“宁愿让
genfromtxt
seg_data1
的形式返回数据”,那么生成的
seg_data1
有什么问题?看起来您可能混淆了结构化数组中的字段和多维数组中的列。字段可以有不同的数据类型,但列不能。如果您想要一个数据结构,其中“列”可以具有不同的数据类型,那么您可能需要使用一个数组来代替。一个
panda.DataFrame
是否使用一个结构化数组来存储其数据?还是一个
dtype=object
数组?或者取决于什么方便?@hpaulj取决于-我认为它可以是任何类型的ndarray,包括结构化数组和对象数组。@TadhgJensen它表示第一列是字符串,其余的列是浮点数。这到底是什么假设要表示数据类型?我不太明白您想做什么。您的意思是“宁愿让
genfromtxt
seg_data1
的形式返回数据”,那么生成的
seg_data1
有什么问题?看起来您可能混淆了结构化数组中的字段和多维数组中的列。字段可以有不同的数据类型,但列不能。如果您想要一个数据结构,其中“列”可以具有不同的数据类型,那么您可能需要使用一个数组来代替。一个
panda.DataFrame
是否使用一个结构化数组来存储其数据?还是一个
dtype=object
数组?或者取决于什么方便?@hpaulj取决于-我认为它可以是任何类型的ndarray,包括结构化数组和对象数组。@TadhgJensen它表示第一列是字符串,其余列是浮点数。