2017-01-11 3 views
0

아래 코드는 다음 값 오류를 생성합니다."ValueError : 피연산자를 함께 브로드 캐스팅 할 수 없음"

ValueError: operands could not be broadcast together with shapes (8,8) (64,) 
내가 10 개 이미지 인터프리터 내가 하나 때문에 이러한 데이터 포인트에 어떤 좌표 현명한 작업을 수행 할 수 있다는 것을 말해 것으로 보인다 (100)로 설정하고 "훈련"데이터를 확장 할 때 처음 발생

좌표 쌍에 값이 누락되었습니다. 나는 그것으로 논쟁 할 수 없다. 불행히도, 제 일은 정확하게 해결되지 않았습니다. if 문 다음에 continue 문을 삽입하려고 시도했습니다 (즉,이 특정 좌표가 오면 루프 상단에서 계속 진행해야 함). 통역사는이 생각이 마음에 들지 않았고 그 진술의 진실에 관해 뭔가를 중얼 거렸다. 그것은 a.any() 또는 a.all()을 시도 할 것을 제안했습니다. 나는 두 가지 예를 모두 살펴 보았고 문제가되는 좌표 쌍을 괄호 안에 넣고 "a"대신에 시도했다. 두 방법 모두 나를 아무 곳에도 데려왔다. 나는 C에서 특정 기준을 충족시키지 못하는 입력을 제외시키기 위해 사용할 함수와 유사한 파이썬 함수를 모르고있다. 비슷한 문제에 관한 다른 해답은 하나의 수학 사용을 변경하는 것이 좋습니다. 그러나 이것이 내가 어떻게 진행할 것인가라는 말을 들었습니다. 그래서 나는 그것을 오류 처리 문제로보고 있습니다.

사람 하나가이 문제를 처리하는 방법에 관한 통찰력을 가지고 있습니까? 어떤 생각이라도 대단히 감사하겠습니다!

여기에 코드입니다 : 당신은 오류가 발생하는 경우 우리를 보여줄 필요가

import numpy as np 
import matplotlib.pyplot as plt 
from sklearn import datasets 

digits = datasets.load_digits() 
#print the 0th image in the image database as an integer matrix 
print(digits.images[0]) 
#plot the 0th image in the database assigning each pixel an intensity of black 
plt.figure() 
plt.imshow(digits.images[0], cmap = plt.cm.gray_r, interpolation = 'nearest') 
plt.show() 
#create training subsets of images and targets(labels) 
X_train = digits.images[0:1000] 
Y_train = digits.target[0:1000] 
#pick a test point from images (345) 
X_test = digits.images[345] 
#view test data point 
plt.figure() 
plt.imshow(digits.images[345], cmap = plt.cm.gray_r, interpolation = 'nearest') 
plt.show() 
#distance 
def dist(x, y): 
    return np.sqrt(np.sum((x - y)**2)) 

#expand set of test data 
num = len(X_train) 
no_errors = 0 
distance = np.zeros(num) 
for j in range(1697, 1797): 
    X_test = digits.data[j] 
    for i in range(num): 
     distance[i] = dist(X_train[i], X_test) 
    min_index = np.argmin(distance) 
    if Y_train[min_index] != digits.target[j]: 
     no_errors += 1 
print(no_errors) 

답변

1

및 오류 스택의 일부.

은 그럼 당신은 배열이 문제의 원인이되는 식별하고 그 형태를 검토 할 필요가있다. 실제로이 오류는 우리에게 알려줍니다. 한 피연산자는 8x8 2 차원 배열입니다. 다른 하나는 요소 수와 동일하지만 1d 모양입니다. 일부 변수를 자신의 코드로 추적해야 할 수도 있습니다.

그냥 문제를 설명하기 위해 : 2 개 개의 배열이 같은 수의 원소를 가지고 있기 때문에

In [381]: x = np.ones((8,8),int) 
In [384]: y = np.arange(64) 
In [385]: x*y 
... 
ValueError: operands could not be broadcast together with shapes (8,8) (64,) 
In [386]: x[:] = y 
... 
ValueError: could not broadcast input array from shape (64) into shape (8,8) 

을 수정 가능성이 하나 또는 다른 재편 포함 :

In [387]: x.ravel() + y 
Out[387]: 
array([ 1, 2, 3, 4, 5, ... 64]) 

또는 x-y.reshape(8,8)을. 내 기본 요점은

, 당신은 모양이 무엇을 의미하는지 배열 이해할 필요하고, 다른 모양의 배열을 함께하는 방법을 사용할 수 있습니다. 오류가 발생하지 않으면 입력을 수정하여 호환 가능한 '방송'되도록하십시오. 내가 문제라고 생각하지 않는다

는 특정 요소의 값입니다. 당신이 if 맥락에서 배열을 테스트 할 때

truth value 오류가 발생합니다. if은 True/False 값의 배열이 아닌 단순한 True 또는 False를 예상합니다.

In [389]: if x>0:print('yes') 
.... 
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 
+0

훨씬 알. 여기에 사용 된 가져온 모듈은 매우 새로운 요소이므로 좀 더 조심스럽게 여러분의 응답을 고려해보고, 잠시 동안 놀고, 아마도 배열과 브로드 캐스트 규칙에 초점을 둔 모듈에 대해 조금 더 읽고 싶을 것입니다. 그게 날 잡는 곳을 봐. 많은 시간을 가져 주셔서 감사합니다! – Ryan

+1

'sklearns'가 제공하는'datasets'의 본질에 대해 더 많이 읽어야 할 수도 있습니다. 다른'sklearn' 질문을 검색해야 할 수도 있습니다. – hpaulj

관련 문제