2014-04-30 2 views
1

아래 코드에서이 오류가 발생하지만 이유를 파악하지 못했습니다.ValueError : 모양을 수정하기 위해 배열을 브로드 캐스팅 할 수 없습니다. - Python

나는 내 물건의 모양을 인쇄했고 그것들은 동일합니다.

def plot_edges_entropy(data, edges, file_path): 
    plt.figure() 

    entropy = numpy.zeros((data.rows, data.cols), float) 
    print entropy.shape, edges.data.shape, data.data.shape 
    entropy[edges.data == 1.0] = data.data 

    fig = plt.imshow(entropy, extent=[0, data.cols, data.rows, 0], cmap='hot_r', vmin=0, vmax=1, interpolation='nearest') 
    plt.colorbar(fig) 
    plt.savefig(file_path + '.png') 
    plt.close() 

def __init__(self, open_image=False): 
    """ 
    The Data constructor 
    """ 
    self.data = misc.imread('../TestImages/brain_noisy.jpg', flatten=True) 
    self.data /= 255.0 
    x, y = self.data.shape 
    self.rows = x 
    self.cols = y 

    if not open_image: 
     self.data = numpy.zeros((self.rows, self.cols), float) 

인쇄 문 :

(211, 256) (211, 256) (211, 256)

오류 :

entropy[edges.data == 1.0] = data.data

ValueError: array is not broadcastable to correct shape

나는 간단한 값을 할당하려고하면 작동 :

entropy[edges.data == 1.0] = 100 

무엇인가하는 문제가? 어떤 조건과 관련하여 ndarray를 다른 것에 할당 할 수 있습니까?

미리 감사드립니다.

+0

엔트로피'보고보십시오 .shape' 그리고 당신은 다른 것을 볼 수 있습니다. 나는 단지 당신의 의도를 짐작할뿐입니다. 그러나 여러분은 또한 아래에 설명 된 것처럼'edges.data == 1.0'을 사용하여'data.data'를 가리고 싶을 수도 있습니다 – eickenberg

답변

2

어디서나 edges.data == 1.0을 제외하고는 data.data으로 설정하려고하기 때문에이 방법은 작동하지 않습니다. 당신은 아마도 다음을 의도하고 있습니까?

entropy[edges.data == 1.0] = data.data[edges.data == 1.0] 
1

당신은 entropy의 부분 집합에 할당하고, 특히 집합하는 edges.data == 1합니다.

data.data은 할당하려는 하위 집합과 동일한 모양이어야합니다.

는 확인 인쇄를 시도하려면 [== edges.data 1.0] entropy[edges.data == 1.0].shape

관련 문제