본문 바로가기
파이썬

파이썬 ufunc 'add' did not contain loop with signature matching type dtype ('S32') ('S32') ('S32')

by º기록 2020. 10. 24.
반응형

일부 히스토그램을 플로팅하기 위해 만든 일부 시뮬레이션에 대해 누군가의 스크립트를 실행하려고하는데, 그렇게하면 항상 위에서 언급 한 오류 메시지가 나타납니다. 나는 무엇이 잘못되었는지 전혀 모른다.

내가 얻는 완전한 역 추적 오류는 다음과 같습니다.

File "AVAnalyse.py", line 205, in <module> 
  f.write(line[0]+'  '+line[1]+'  '+line[2]+'  '+line[3]) 
TypeError: ufunc 'add' did not contain a loop with signature matching types dtype('S32') dtype('S32') dtype('S32')

이것은 내가 실행하려는 코드입니다.

name_out = "histogram_"+donor+"_"+acceptor+".dat"   
  f = open(name_out,'w')
  f.write('distance  d.probability  efficiency  e.probability')
  for line in dist_hist:
    f.write(line[0]+'  '+line[1]+'  '+line[2]+'  '+line[3])
  f.close()


  print "data saved in " +"histogram_"+donor+"_"+acceptor+".dat"

내가 뭘 잘못하고 있는지에 대한 도움 / 설명을 주시면 대단히 감사하겠습니다! 미리 감사드립니다!

 

해결 방법

 

line [0] , line [1] , line [2] , line [3] 처럼 보입니다. dist_hist 의 요소입니다. dict_hist numpy.ndarray 입니다. dict_hist 의 요소에는 숫자 유형 (예 : np.float64 )이 있습니다 (첨부 파일의 계산 기준). np.float64 str 과 같은 다른 유형의 요소를 추가하려고합니다. 이 TypeError 를 방지하려면 line [0] , line [1] , line [2의 유형을 변경할 수 있습니다. ] , line [3] 에서 str.

코드 스 니펫은 다음과 같아야합니다.

name_out = "histogram_"+donor+"_"+acceptor+".dat"   
f = open(name_out,'w')
f.write('distance  d.probability  efficiency  e.probability')
for line in dist_hist:
  f.write(str(line[0])+'  '+str(line[1])+'  '+str(line[2])+'  '+str(line[3]))
f.close()

print "data saved in " +"histogram_"+donor+"_"+acceptor+".dat"

편집하다:

다음 코드 조각을 바꿔야합니다.

name_out = "histogram_"+donor+"_"+acceptor+".dat"   
f = open(name_out,'w')
f.write('distance  d.probability  efficiency  e.probability')
for line in dist_hist:
  f.write(line[0]+'  '+line[1]+'  '+line[2]+'  '+line[3])
f.close()

이것에 :

name_out = "histogram_" + donor + "_" + acceptor + ".dat"   
f = open(name_out,'w')
f.write('distance  d.probability  efficiency  e.probability\n')
for line in dist_hist:
  f.write(str(line[0]) + '  ' + str(line[1]) + '  ' + str(line[2]) + '  ' + str(line[3]) + '\n')
f.close()

그 전에는 문자열이 한 줄로 파일에 기록되었습니다. 그 때문에 데이터 변수는 두 번째 줄 (비어 있음)에서 읽기 시작했기 때문에 빈 배열을 가리 킵니다.

 

참조 페이지 https://stackoverflow.com/questions/41859824

 

 

반응형

댓글