【问题标题】:ValueError: array is not broadcastable to correct shape - PythonValueError:数组不可广播以纠正形状 - Python
【发布时间】:2014-04-30 20:30:41
【问题描述】:

我收到下面代码的这个错误,但我不知道为什么。

我打印了我的对象形状,它们是相同的。

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)

错误:

熵[edges.data == 1.0] = data.data

ValueError: 数组不可广播以纠正形状

如果我尝试分配一个简单的值,它会起作用:

 entropy[edges.data == 1.0] = 100

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

提前谢谢你。

【问题讨论】:

  • 尝试查看entropy[edges.data == 1.0].shape,您会发现它有所不同。我只是猜测您的意图,但您可能还想使用edges.data == 1.0 屏蔽data.data,如下所述

标签: python numpy shape


【解决方案1】:

除非edges.data == 1.0 无处不在,否则这是行不通的,因为您正在尝试使用完整的data.data 设置它。您是否可能有以下意图?

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

【讨论】:

    【解决方案2】:

    您正在分配给entropy 的子集,特别是edges.data == 1 的子集。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-09
      • 2020-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多