所以我有一个数组(大的-2048x2048),我想根据它们所在的位置执行一些元素操作。我很困惑如何做到这一点(我被告知不要使用for循环,当我尝试我的IDE冻结时,它的速度非常慢)。在
关于这个问题:
h = aperatureimage
h[:,:] = 0
indices = np.where(aperatureimage>1)
for True in h:
h[index] = np.exp(1j*k*z)*np.exp(1j*k*(x**2+y**2)/(2*z))/(1j*wave*z)
所以我有一个索引,它(我在这里假设)本质上是我的大孔径图像数组的“裁剪”版本。*注:光圈图像是一个灰度图像转换成一个数组,它有一个形状或文字,我想找到所有'白色'区域的光圈和执行我的操作。在
如何访问索引的各个x/y值,以便执行指数运算?当我尝试索引[:,None]时,会导致程序输出“ValueError:broadcast dimensions too large”。我也得到了数组不可广播的形状。任何帮助都将不胜感激!在
还有一个澄清:x和y是我想要更改的唯一值(本质上是数组中有white、z、k和前面定义的其他值的点)。在
编辑:
我不确定我上面发布的代码是否正确,它返回两个空数组。当我这么做的时候 索引=(孔径图像==1) 打印长度(索引)
事实上,到目前为止我所做的一切都是正确的。我有一张2048x2048的图像,中间有一个128x128的白色正方形。我想将这个图像转换成一个数组,查看所有的值并确定索引值(x,y),其中数组不是黑色的(我只有白色/黑色,双层图像不适合我)。然后我想取数组不为0的所有值(x,y),然后乘以上面列出的h[index]值。在
如果需要,我可以发布更多信息。如果你看不出来,我就卡住了。在
这里有一些代码可能会有帮助-我想我已经解决了上面的问题(我现在可以访问数组的成员并对它们执行操作)。但是-由于某些原因,for循环中的Fx值从未增加,它循环Fy永远。。。。在
^{pr2}$您需要numpy、scipy和PIL来处理这些代码。在
当我运行这个程序时,它会遍历代码,但是其中没有数据(所有内容都是黑色的)。现在我遇到了一个真正的问题,因为我不完全理解我正在做的数学(这是针对HW的),而且我对Python也没有很好的理解。在
U[index[0],index[1]] = aperaturearray[index[0],index[1]] * np.exp(1j*k*((index[0]-middle)**2+(index[1]-middle)**2)/(2*z))
那条线应该在我的数组上执行元素计算吗?在
你能发布一个最小的,但完整的例子吗?一个我们可以复制/粘贴并运行自己的?在
同时,在当前示例的前两行:
将“apertureImage”和“h”都设置为0。那可能不是你想要的。您可能需要考虑:
^{pr2}$这将生成apertureImage的副本,而代码只需将h指向与apertureImage相同的数组。所以改变一个就会改变另一个。 请注意,复制非常大的数组可能会消耗比您更大的内存。在
我想你想做的是:
或者类似的东西。在任何情况下,这将基于x/y坐标在“b”中设置一些值,其中“a”大于0。试着用imshow可视化它。祝你好运!在
关于编辑
您应该规范化您的输出,使其适合8位整数。目前,其中一个数组的最大值远大于255,而另一个数组的最大值则小得多。试试这个:
同时考虑np.Zero类()而不是复制和清除H和U
最后,我个人非常喜欢与ipython一起开发类似的东西。如果将衍射函数中的代码放在脚本的顶层(代替“If”name_ux&c.),则可以直接从ipython访问变量。一个快速的命令np.amax公司(Utfm)会告诉你确实有价值!=0。imshow()总是很好地查看矩阵。在
相关问题 更多 >
编程相关推荐