как обновить значение в csr_matrix - PullRequest
1 голос
/ 11 июля 2019

Я создал csr_matrix размером 16 ^ 4 и 16 ^ 8.Но мне нужно обновить значение в csr_matrix, так как я могу обновить значение в разреженной матрице.

Я также пробовал twoByte.toarray()[i] += 1, twoByte.toarray()[0][i] += 1 и twoByte[0].toarray()[i] += 1, но это не работает.ниже приведен фрагмент кода.

feature_matrix_two = csr_matrix((len(files),16**4),dtype=int)
feature_matrix_four = csr_matrix((len(files),16**6),dtype=int)

k=0

byte_feature_file=open('bigramresult.csv','w+')

for file in files:
    byte_feature_file.write(file+",")
    if(file.endswith("txt")):
        with open('byteFiles/'+file,"r") as byte_code:
            twoByte = csr_matrix((1,16**4),dtype = int)
            fourByte = csr_matrix((1,16**8),dtype = int)
            for row in byte_code:
                codes = row.rstrip().split(" ")
                codes_2g = codes[:-1]
                codes_4g = codes[:-2]
                for i in range(len(codes_2g)):
                    codes_2g[i] += codes[i+1]
                for i in range(len(codes_4g)):
                    codes_4g[i] += codes[i+1]+codes[i+2]

                twoByteCode = []
                for i in codes_2g:
                    if '??' not in i:
                        twoByteCode += [int(i,16)]
                fourByteCode = []
                for i in codes_4g:
                    if '??' not in i:
                        fourByteCode += [int(i,16)]

                for i in twoByteCode:
                    twoByte[i] += 1

                for i in fourByteCode:
                    fourByte[i] += 1
            byte_code.close()
            feature_matrix_two[k] = twoByte
            feature_matrix_four[k] = fourByte

    for i in feature_matrix_two[k]:
        byte_feature_file.write(str(i)+",")
    for i in feature_matrix_four[k]:
        byte_feature_file.write(str(i)+",")

    byte_feature_file.write("\n")
    k+=1

1 Ответ

0 голосов
/ 11 июля 2019

Из кода, я думаю, вам не нужна разреженная матрица, вы можете использовать объект dict, например:

from collections import defaultdict 
twoByte = defaultdict(int)
fourByte = defaultdict(int)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...