簡體   English   中英

如何從元組列表創建二維 numpy 數組

[英]How to create a 2d numpy array from a list of tuples

我有一個大文本文件,每行包含三個元素 - 用戶、問題、值。 我想根據這些數據創建一個二維 numpy 數組。 數據樣本是這樣的:

114250 3 1
124400 7 4
111304 1 1

不幸的是,我事先不知道結果矩陣的大小,因此無法對其進行初始化。

我設法使用此代碼將數據讀入 3 元組列表(將任意用戶 ID 轉換為線性 1,2,3... 表示):

users = dict()
data = list()

for line in fileinput.input( args[0] ):
    tokens = line.split("\t")
    tokens = [ t.strip("\r").strip("\n") for t in tokens ]
    user = tokens[0]
    question = tokens[1]
    response = tokens[2]

    if user in users.keys():
        user_id = users.get( user )     # existing user
    else:
        user_counter = user_counter + 1 # add new user
        users[user] = user_counter
        user_id = user_counter

    data.append( (int(user_id), int(question), int(response)) )

我不確定如何將此元組列表轉換為二維 numpy 數組。 我很想知道如何以 Pythonic 的方式做到這一點。

應該有一些方法可以讀取每個元組,獲取 user_id 和問題作為列,行並將響應值放入該 2D numpy 數組中。 例如像這樣的元組

(10,3,1)

意味着我想將值 1 放入二維矩陣第 10 行、第 3 列。

import numpy

data = []
with open('filename', 'r') as f:
    for line in f:
        data.append(map(int, line.strip().split()))

r, c = max(data, key=lambda x: x[0]), max(data, key=lambda x: x[1])
A = numpy.zeros(shape = (r+1, c+1))
for i,j, val in data:
    A[i][j] = val

我沒有試過這個,但應該工作。 請注意,索引從 0 開始。

之后只需生成矩陣:

import numpy as np

data = numpy.array(data)
result = numpy.zeros(shape=(data[:,0].max()+1, data[:,1].max()+1), dtype=int)
result[data[:,0], data[:,1]] = data[:,2] 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM