Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.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表分类_Python_Forms_Distribution - Fatal编程技术网

Python表分类

Python表分类,python,forms,distribution,Python,Forms,Distribution,我有文本文件(test.data),其中包括一些值和类名,例如 4.5,3.5,U1 4.5,10.5,U2 4.5,6,U1 3.5,10.5,U2 3.5,10.5,U2 5,7,U1 7,6.5,U1 我需要将这些数据分类为行(矩阵),其中1,2行etc是数据,最后一行是类。因此,我从以下代码开始: reader = csv.reader(open('test.data', 'r')) result = [] for row in reader: result.append(ro

我有文本文件(test.data),其中包括一些值和类名,例如

4.5,3.5,U1
4.5,10.5,U2
4.5,6,U1
3.5,10.5,U2
3.5,10.5,U2
5,7,U1
7,6.5,U1
我需要将这些数据分类为行(矩阵),其中1,2行etc是数据,最后一行是类。因此,我从以下代码开始:

reader = csv.reader(open('test.data', 'r'))
result = []
for row in reader:
    result.append(row)
print result
输出:

[['4.5', '3.5', 'U1'], ['4.5', '10.5', 'U2'], ['4.5', '6', 'U1'], ['3.5', '10.5', 'U2'], ['3.5', '10.5', 'U2'], ['5', '7', 'U1'], ['7', '6.5', 'U1']]
这一切工作正常,但现在我需要从这些数据做矩阵分类。在这种情况下,我想制作矩阵:

test data=[data1, data2,.....,class name1]
test data2=[data1, data2,.....,class name2]...
我需要这个“矩阵”(测试数据,测试数据2),因为我将从每个测试数据中选择2/3数据,这些数据将被命名为“choosen”,其他1/3数据必须保留在测试数据中

因此,我需要的是输出:

choosen=[data,data,......class name1]         # 2/3 from every **test.data**
test data=[data1, data2,.....,class name1]    # other 1/3 from test data
test data2=[data1, data2,.....,class name1]   # other 1/3 from test data 2

非常感谢你的帮助


EDIT2:

如果我使用您的代码,我会得到:

{
    'U1': [
              ['4.5','3.5'],
              ['4.5','6'],
              ['5','7'],
              ['7','6.5']
          ],
    'U2': [
              ['4.5','10.5'],
              ['3.5','10.5'],
              ['3.5','10.5']
          ]
}
但我并不是每次都有这些数据:

4.5,3.5,U1
4.5,10.5,U2
4.5,6,U1
3.5,10.5,U2
3.5,10.5,U2
5,7,U1
7,6.5,U1
我还:

4.5,3.5,4.5,10.5, U1
3.5,10.5,3.5,10.5,U2
4.5,12.5,3.5,12.5,U2
。。。。。。 (所以在编写代码时,我不知道类在第二行),但我知道最后一行是类

那么我如何更改您的代码:

reader = csv.reader(open('test.data', 'r'))
result = {}
for row in reader:
    uclass=row[2]                      #-------> must be last row not second !!!!
    if result.has_key(uclass):
        result[uclass].append([row[0],row[1]])   #---->not just 2 row's, on other data I have for example 5 rows..
    else:
        result[uclass]=[[row[0],row[1]]]        #---->not just 2 row's, on other data I have for example 5 rows..
print repr(result)
编辑:修改原始代码段以处理N列输入(最后一个是类)。OP在随后的答复中提到了这一要求

我仍然不能完全确定你问题的后半部分。 也许你解释的方式中缺少了一些东西

如果我理解正确的话,你想为每门课列出不同的清单吗

如果是这种情况,词典应该满足您的要求:

reader = csv.reader(open('test.data', 'r'))
result = {}
for row in reader:
    uclass=row[2]
    if result.has_key(uclass):
        result[uclass].append([row[0],row[1]])
    else:
        result[uclass]=[[row[0],row[1]]]
print repr(result)
结果如下所示:

{
    'U1': [
              ['4.5','3.5'],
              ['4.5','6'],
              ['5','7'],
              ['7','6.5']
          ],
    'U2': [
              ['4.5','10.5'],
              ['3.5','10.5'],
              ['3.5','10.5']
          ]
}
对于数据跳过,您可以使用较新Python中提供的列表切片跳过选项:

someList[<start>:<end>:<skip>]
使用跳过切片,例如:

someList[0:10:2]
给出:

[0,2,4,6,8]

我真的不清楚你想做什么。你能用第一个例子中的数据解释问题的第二部分吗?如果输入数据
4.5,3.5,U1…
,您要查找的结果是什么?仅供参考:“列表中最后一个元素”的pythonese是someList[-1],“除最后一个元素外的所有元素”都可以表示为someList[0:-1]。这也适用于字符串:
“abcde”[0:-1]=“abcd”
“abcde”[-1]=“e”
是的,但我有各种数据,所以不仅仅是3行,其中1和2是数据,第三个是类。但每次最后一行是类,其他一行是数据。。。;你能改变你的密码吗?不,你不明白我的意思;请看我的第一篇帖子。thanksI编辑了代码的第一部分,以处理您在注释中详述的N列输入。我对你问题的后半部分还不清楚。在我看来,这些数据就像N向量的组(按类分组),你提到你想用它们组成一个矩阵。你必须更清楚地说出矩阵的意思。它在不同的问题领域有多种含义(例如:在线性代数中)。
someList[0:10:2]
[0,2,4,6,8]