habe ich eine sparse.txt, die wie folgt aussieht: diese erstellen dichte Matrix aus Sparse Matrix efficently (numpy/scipy aber NO sklearn)
Die erforderliche dense.txt ist
# first column is label 0 or 1
# rest of the data is sparse data
# maximum value in the data is 4, so the future dense matrix will
# have 1+4 = 5 elements in a row
# file: sparse.txt
1 1:1 2:1 3:1
0 1:1 4:1
1 2:1 3:1 4:1
:
# required file: dense.txt
1 1 1 1 0
0 1 0 0 1
1 0 1 1 1
Ohne scipy coo_matrix mit ihm tat es auf einfache Weise wie folgt aus:
def create_dense(fsparse, fdense,fvocab):
# number of lines in vocab
lvocab = sum(1 for line in open(fvocab))
# create dense file
with open(fsparse) as fi, open(fdense,'w') as fo:
for i, line in enumerate(fi):
words = line.strip('\n').split(':')
words = " ".join(words).split()
label = int(words[0])
indices = [int(w) for (i,w) in enumerate(words) if int(i)%2]
row = [0]* (lvocab+1)
row[0] = label
# use listcomps
row = [ 1 if i in indices else row[i] for i in range(len(row))]
l = " ".join(map(str,row)) + "\n"
fo.write(l)
print('Writing dense matrix line: ', i+1)
Frage Wie können wir direkt Label und Daten aus spärlichen Daten erhalten, ohne vorher eine dichte Matrix zu erstellen und NUMPY/Scipy zu verwenden?
Frage: Wie können wir die spärlichen Daten mit numpy.fromregex lesen?
Mein Versuch ist:
def read_file(fsparse):
regex = r'([0-1]\s)([0-9]):(1\s)*([0-9]:1)' + r'\s*\n'
data = np.fromregex(fsparse,regex,dtype=str)
print(data,file=open('dense.txt','w'))
Es hat nicht funktioniert!
Weiterführende Links:
Parsing colon separated sparse data with pandas and numpy
Wie wäre es mit 'row' in einer Liste? Das wäre eine Liste von Listen (von Zahlen), oder? Können Sie das Array direkt daraus machen? – hpaulj
@hpaulj, ich kann Array von Etiketten machen, aber Schwierigkeiten haben, Matrix. – astro123
@hpauj, ich kann auch Label lesen, und Daten aus einer Textdatei mit numpy.loadtxt, – astro123