值错误:无法将输入数组从形状(80269269)广播到形状(80269234)

2024-09-27 23:15:15 发布

您现在位置:Python中文网/ 问答频道 /正文

dataI的形状是(80,336,336)

z= np.zeros([80,800,800], dtype= dataI.dtype)

v=np.zeros_like(z)

centres = [(100,200),(400,100), (600,300), (500,400), (600,500)]
zooms = [[1,1,1], [1,0.6,0.6], [1,0.7,0.7], [1,0.8,0.8], [1,0.9,0.9]]

for cent,zoom in zip(centres,zooms):

    dataZ = scipy.ndimage.zoom(dataI, zoom, order=3) 
    dimZ = dataZ.shape
    off = [max(c-s//2,0) for c,s in zip(cent,dimZ)]
    z[0:dataZ.shape[0],off[0]:off[0]+dimZ[1],off[1]:off[1]+dimZ[2]]=dataZ

我需要将缩放后的数据放入大数组z。通过给出中心位置,我需要放置数据(如果重叠,取这些值的平均值)

但我得到了以下错误:

^{pr2}$

我如何解决这个错误?在


Tags: infornpzeroszipcentshapedtype
1条回答
网友
1楼 · 发布于 2024-09-27 23:15:15

问题是切片可以超出数组扩展,在这种情况下,只返回数组扩展中的元素:

>>> arr = np.ones((3, 3))
>>> arr[2:10, 2:10]   # that doesn't have shape (8, 8)!
array([[ 1.]])

因此,您的计算超出了范围,因此z[0:dataZ.shape[0],off[0]:off[0]+dimZ[1],off[1]:off[1]+dimZ[2]]不是您期望的形状!在

我添加了一些调试语句:

^{pr2}$

此打印:

[60, 32]
(slice(0, 80, None), slice(60, 396, None), slice(32, 368, None))
[360, 0]
(slice(0, 80, None), slice(360, 562, None), slice(0, 202, None))
[560, 183]
(slice(0, 80, None), slice(560, 795, None), slice(183, 418, None))
[460, 266]
(slice(0, 80, None), slice(460, 729, None), slice(266, 535, None))
[560, 349]
(slice(0, 80, None), slice(560, 862, None), slice(349, 651, None))

我前面提到的适用于这里:slice(560, 862, None)超出了扩展,因此在第二个维度中缺少62项:

ValueError: could not broadcast input array from shape (80,302,302) into shape (80,240,302) 

简单的解决方法:增加你的z的大小!在


{{cd6>你知道吗?所以

max(c-s//2,0)     # is equivalent to max(c-(s//2), 0)

相关问题 更多 >

    热门问题