“ ValueError:操作数不能与形状(109,109)(2,)(109,109)一起广播]

问题描述 投票:0回答:2

我在jupyter笔记本电脑中使用astropy来处理拟合文件。我正在使用名为pyKLIP的第三方应用程序。

有人可以解释此错误消息的结构,只要它带有三组括号(普通照会,原文如此)。我发现此错误消息没有这样的构造,该错误消息带有三组括号,这使得解密所需的内容变得更加困难。

ValueError: operands could not be broadcast together with shapes (109,109) (2,) (109,109)

[109,109只能是拟合图像的分辨率,保持在由109行乘109列的91个独立帧组成的numpy数组中。

我尚无法确定的数字2,因为我无法在第三方函数中打印出打印语句。我所知道的唯一2个是x中心和y中心的91组数组。

进入第三方应用程序的规范要求:

输入=用于形状(y,x)的N个图像的形状(N,y,x)的数组

centers = N个输入中心的形状数组(N,2),格式为[x_cent,y_cent]

如果我将这些成员打印为大小和形状,则会得到:

dataset.input.size      :  1081171
dataset.input.shape     :  (91, 109, 109)
dataset.centers.size    :  182
dataset.centers.shape   :  (91, 2)

非常感谢任何破译此广播错误的指针。谢谢。

python numpy broadcast astropy operands
2个回答
0
投票

当寻求有关此类错误的帮助时,将重点放在消息的第一部分broadcast togetherTHREE SETS of parentheses特定于您的情况。知道broadcasting rules,很显然这三个数组不能一起工作。您的任务是确定哪些。

您发现的事实:

dataset.input.shape     :  (91, 109, 109)
dataset.centers.shape   :  (91, 2)

建议您的代码(或所调用的内容)正在这些数组的第一个维度上进行某种“批处理”迭代,并通过以下方式进行处理

dataset.input[i]
dataset.centers[i]

但是没有完整的追溯,我们不能说更多。即使有了回溯,也很难将立即错误回溯到代码中的错误源。


0
投票

我想赞扬其建议对解决方案具有影响力的个人。

Iguananaut说得到一个调试器。我研究了调试器,确定Python Visual Debugger是故障单,然后发现它需要Anaconda。先安装Anaconda,然后安装Analogonda的pyklip,然后在Anaconda的pyklip模块中创建我自己的打印语句,无论出于何种原因,Anaconda的pyklip模块都可以执行我的打印语句。

因此,我看到系统*希望添加两个单独的一元素二元素元组,但正在*馈入一个一元素二元素元组+一个NNN实例二元素元组数组。这恰好是失败消息表示的行号。

我将不得不进行更多检查,但我认为规范可能不够明确,以致得出错误的结论。我*认为“中心= N个输入中心的形状数组(N,2),格式为[x_cent,y_cent]”应表示“形状(1,2)”。 (IIRC元组没有形状成员。)

[谁能说出Anaconda如何或为何安装第三方库pyklip来使pyklip代码内的打印语句成功执行,而pyklip的github存储库却允许*不允许pyklip代码内的print语句成功执行?

对开头问题的实质性回答是,109行乘109列需要使每个像元值向上或向下偏移很小的量才能实现图像的重新居中。由于无法正确计算两个单独的一个实例双元素元组之间的dx和dy之差,因此无法达到这一点。

© www.soinside.com 2019 - 2024. All rights reserved.