将列表或数组列表转换为nxn二进制矩阵

时间:2017-03-29 15:25:58

标签: python

好的,我需要采用以下格式的输入文件

5 5 12
1 1
1 2
2 1
2 3
3 1
3 2
3 4
4 2
4 4
1 2
2 3
5 5

然后将其转换为矩形,其中左侧列表示客户ID,右侧列表示项目ID。

我可以让Python导入数据但是我很难按照我需要的方式操作它。

以及我需要数据的示例如下:

          Item 1   Item 2  Item 3
Customer1:  1        2       0    
Customer2:  1        0       2

以下是我用于导入数据的方法:

def DataImport(filename):

    Data = []
    with open(filename) as f:
        for line in f:
            Data.append([int(v) for v in line.split()])
    return Data

(不完全的)

def ImportData(filename):
    if filename == "history.txt":
        Option1 = np.loadtxt(filename, skiprows=1)
        CustomerID = np.loadtxt(filename, skiprows=1, usecols=(0,))
        ItemID = np.loadtxt(filename, skiprows=1, usecols=(1,))
        print(CustomerID)
        print(ItemID)
        print(Option1)
        Option11 = []
        for i in Option1:
            if i[i][0] == i[0]:
                Option11.append(i[0][1])
        print(Option11)
    else:
        Data = np.loadtxt(filename)

def ImportData(filename):
    rawdata = {}
    File = open(filename, "r")

    for line in File:
        rawdata[len(rawdata)+1] = line.rstrip("\n")
    File.close()
    print(rawdata)

def ImportData2(filename):
    with open(filename, newline='') as file:
        reader = csv.reader(file, delimiter=' ')
        next(reader)
        TRvalues = dict(reader)
    print(TRvalues)

我认为numpy方法以最容易使用的方式呈现,但我不确定如何使用customerID作为键来使用Python,然后以前面提到的方式添加值。

我不确定我是否已经解释得很好,但如果您需要更多说明,我可以回答问题。

1 个答案:

答案 0 :(得分:0)

原则上我强烈建议使用像PANDAS(http://pandas.pydata.org/pandas-docs/stable/io.html)这样的东西,尤其是

pandas.read_tabel 

将生成一个可以随意操作的pandas数据框。 但是,如果您不喜欢它,您也可以通过简单地使用

按行而不是行进行迭代
for row in matrix.T:
  instructions for rows...

而不是

for col in matrix:
  instructions for columns...
希望它有所帮助。