TypeError: ufunc 'multiply' did not contain a loop with signature matching types dtype('S32')
처음 이 에러를 보게 된것은
"머신러닝 인 액션" 이라는 책의 예제코드를 테스트하다가 였다.
numpy의 array를 생성한 후 연산할 경우 위와 같은 에러가 발생할 수 있다.
또는
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: ufunc 'multiply' did not contain a loop with signature matching types dtype('S32') dtype('S32') dtype('S32')
책의 예제코드를 보자
>>> a = numpy.array(datingLabels) >>> a array(['3', '2', '1', '1', '1', '1', '3', '3', '1', '3', '1', '1', '2', '1', '1', '1', '1', '1', '2', '3', '2', '1', '2', '3', '2', '3', '2', '3', '2', '1', '3', '1', '3', '1', '2', '1', '1', '2', '3', '3', '1', '2', '3', '3', '3', '1', '1', '1', '1', '2', '2', '1', ... '3', '1', '3', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '3', '2', '2', '2', '2', '2', '1', '3', '3', '3'], dtype='|S1') >>> 15.0*a Traceback (most recent call last): File "", line 1, in TypeError: ufunc 'multiply' did not contain a loop with signature matching types dtype('S32') dtype('S32') dtype('S32')
여기서 dtype(데이터 타입)이 맞질 않아서 생기는 문제이다.
numpy의 데이터 타입은 아래와 링크에서 확인하기 바란다.
https://docs.scipy.org/doc/numpy-1.9.1/user/basics.types.html
위의 문제를 해결하기 위해서는 dtype(데이터 타입)을 변경해주거나
생성 시 넣어주면 된다.
>>> a = numpy.array(datingLabels, dtype=numpy.int32)
>>> a
array([3, 2, 1, 1, 1, 1, 3, 3, 1, 3, 1, 1, 2, 1, 1, 1, 1, 1, 2, 3, 2, 1, 2,
3, 2, 3, 2, 3, 2, 1, 3, 1, 3, 1, 2, 1, 1, 2, 3, 3, 1, 2, 3, 3, 3, 1,
1, 1, 1, 2, 2, 1, 3, 2, 2, 2, 2, 3, 1, 2, 1, 2, 2, 2, 2, 2, 3, 2, 3,
...
2, 3, 2, 2, 2, 2, 2, 1, 3, 3, 3], dtype=int32)
>>> a*15.0
array([ 45., 30., 15., 15., 15., 15., 45., 45., 15., 45., 15.,
...
45., 30., 30., 30., 30., 30., 15., 45., 45., 45.])
이제 정상적으로 연산이 되는 것을 확인할 수 있다.
'파이썬 > 문제해결' 카테고리의 다른 글
파이썬 ImportError: No module named requests (0) | 2016.12.08 |
---|---|
파이썬 한글 문제 해결하기 - SyntaxError: Non-ASCII character (0) | 2016.12.08 |
SystemError: Cannot compile 'Python.h'. Perhaps you need to install python-dev|python-devel. (0) | 2016.12.08 |
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 54: ordinal not in range(128) (0) | 2016.12.08 |
pip install error (0) | 2016.12.07 |