2016-08-23 3 views
1

"단어 백"방식의 여러 목록을 쌍으로 비교하려고합니다. 내 목록에는 문자열 만 있습니다.
불행히도 스크립트에서 수정할 수없는 버그가 있습니다.
목록에 숫자가있는 경우 코드가 작동하지만 목록에 문자열이 있으면 더 이상 실행되지 않습니다. 도와 주셔서 감사합니다.목록에서 특정 문자열이 얼마나 자주 발생하는지 계산합니다.

나는 다음과 같은 오류 메시지가 나타난다 :

Traceback (most recent call last): 
File "test.py", line 21, in <module> 
bow_matrix[0, p] = list_words_ab[p] 
ValueError: could not convert string to float: 'd' 

내 코드는 기본적 numpy.zeros으로

a = ["a", "b", "c", "d"] 
b = ["b", "c", "d", "e"] 

p = 0 
if len(a) > len(b): 
    max_words = len(a) 
else: 
    max_words = len(b) 
list_words_ab = list(set(a) | set(b)) 
len_bow_matrix = len(list_words_ab) 
bow_matrix = numpy.zeros(shape = (3, len_bow_matrix)) 

while p < len_bow_matrix: 
    bow_matrix[0, p] = list_words_ab[p] 
    p = p+1 
p = 0 
while p < len_bow_matrix: 
    bow_matrix[1, p] = a.count(bow_matrix[0, p]) 
    bow_matrix[2, p] = b.count(bow_matrix[0, p]) 
    p = p+1 
+0

샘플 입력과 필요한 출력을 제공하십시오 –

+0

예 : a [NLS, VS40, AMPR], b = [VS40, VS40, AMPR, GFP] [NLS, VS40, AMPR, GFP]와 같은 행렬을 얻고 싶습니다. , 1, 1, 0], [0, 2, 1, 1]] 첫 번째 행에는 두 문자열 (중복되지 않음)에있는 모든 문자열의 합집합이 있고 두 번째/세 번째 행에는 빈도가 필요합니다. 해당 문자열이 목록 a/b에서 얼마나 자주 발생하는지. – Philipp

+1

'numpy.zeros'를 사용하면 float을 기대하는 행렬을 생성한다고 생각합니다. –

답변

3

가 지정해야 문자열을 사용하는 수레의 빈 배열을 만드는 dtype=str :

bow_matrix = numpy.zeros(shape = (3, len_bow_matrix),dtype=str) 
+0

'dtype = str'은'S1'을 한 문자로 만듭니다. 여기서는 괜찮지 만 더 일반적인 경우에는 그렇지 않습니다. – hpaulj

관련 문제