ValueError:数组不能广播到正确的形状 - Python

时间:2014-04-30 20:30:41

标签: python numpy shape

我使用下面的代码收到此错误,但我没弄清楚原因。

我打印了我的物体形状,它们是一样的。

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:数组无法播放以修正形状

如果我尝试分配一个简单的值,它可以工作:

 entropy[edges.data == 1.0] = 100

问题是什么?我可以根据某些条件将ndarray分配给另一个吗?

提前谢谢。

2 个答案:

答案 0 :(得分:2)

除非edges.data == 1.0无处不在,否则无效,因为您尝试使用完整data.data设置它。您可能打算如下吗?

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

答案 1 :(得分:1)

您要分配到entropy的子集,特别是edges.data == 1的子集。

因此,您需要确保data.data具有与您指定的子集相同的形状。

要检查,请尝试打印:entropy[edges.data == 1.0].shape