ValueError: 数组无法广播到正确形状 - Python

1 投票
2 回答
4076 浏览
提问于 2025-04-18 04:56

我在运行下面的代码时遇到了一个错误,但我不知道为什么会这样。

我打印了我的对象的形状,它们是一样的。

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 个回答

1

你正在给一个叫entropy的部分赋值,具体来说,是给那些edges.data == 1的部分赋值。

所以你需要确保data.data的形状和你要赋值的那部分是一样的。

要检查一下,可以试着打印:entropy[edges.data == 1.0].shape

2

除非edges.data == 1.0在每个地方都是这样,否则这个方法是行不通的,因为你试图用完整的data.data来设置它。你是不是想要这样做呢?

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

撰写回答