Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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.matrix的奇怪输出_Python_Python 3.x_Numpy - Fatal编程技术网

Python 来自numpy.matrix的奇怪输出

Python 来自numpy.matrix的奇怪输出,python,python-3.x,numpy,Python,Python 3.x,Numpy,我有一个数据集,它包含32562行和15列,每行中每列的元素都用逗号“,”分隔。我尝试读取它并使用以下代码将所有数据存储到矩阵中: import numpy as np f = open("adult.data",'r') data = [] for line in f.readlines(): data.append(line.split(",")) print(data[0]) data = np.matrix(data) print(data) 我认为最终数据应该是一个带有形

我有一个数据集,它包含32562行和15列,每行中每列的元素都用逗号“,”分隔。我尝试读取它并使用以下代码将所有数据存储到矩阵中:

import numpy as np

f = open("adult.data",'r')
data = []
for line in f.readlines():
    data.append(line.split(","))

print(data[0])
data = np.matrix(data)
print(data)
我认为最终数据应该是一个带有形状(32562,15)的numpy矩阵,但实际形状是(132562),其中有很多列表([一行数据]):


这怎么会发生?numpy在将包含字符串的列表更改为矩阵时是否有问题?

如果任何行中的列数不同,则会发生这种情况,因为
numpy
无法再将列表解释为宽度为15的矩阵。如果任何单元格包含逗号或某些行中缺少值,则可能会发生这种情况

# Example of irregular row length
mat = np.matrix([[1,2,3], [4,5]])
print(mat)   # matrix([[list([1, 2, 3]), list([4, 5])]], dtype=object)
print(mat.shape)   # (1L, 2L)

# Example of comma in text cell causing irregular row length
from StringIO import StringIO
f = StringIO('1, 2, "Some text"\n3, 4, "More, text"')
mat = np.matrix([line.split(",") for line in f])
print(mat)  # [[list(['1', ' 2', ' "Some text"\n'])  list(['3', ' 4', ' "More', ' text"'])]]
print(mat.shape)  # (1L, 2L)
如果逗号有问题,您可以将数据作为CSV导入-这将处理格式正确的CSV,该CSV可能在引号内包含逗号

import csv
f = StringIO('1, 2, "Some text"\n3, 4, "More, text"')
mat = np.matrix([row for row in csv.reader(f, skipinitialspace=True)])
或者使用,或者

但在您的情况下,问题似乎是文件末尾有一个额外的空行

f = StringIO('6, 7\n8, 9\n\n')
print(np.matrix([line.split(",") for line in f])) # [[list(['6', ' 7\n']) list(['8', ' 9\n']) list(['\n'])]]
你可以通过拆线来解决这个问题

f = StringIO('6, 7\n8, 9\n\n')
data=[]
for line in f:
    line = line.strip()
    if line:
        data.append(line.split(","))

mat = np.matrix(data)

你能准确地显示数据的格式吗?显示前几行吗?如果你使用
np.array(data)
你会得到一个(32562,)形状的数组-一个列表数组。使用
np.matrix
添加一个维度(本例中为1),因为该维度始终是2d。注意,数据类型是
object
。我看到一个
列表([\n])
元素。那将是一个空白行。如果要使用
读行
,请去掉换行符并跳过空行。并确保每行有15个元素(拆分后)。我会尝试:
np.genfromtxt(文件名,分隔符=',',dtype=None,encoding=None)