我问了一个关于这个错误的问题:RuntimeWarning:在除法中遇到零除
例如,我有两个2D数组。第一个包含大量数据(array_1),第二个包含二进制数据(0或1)作为掩码(mask_array)。
我想做这个操作:
private void cb_Save_Click(object sender, EventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog();
// .. add more formats if you want here!
sfd.Filter = "Jpg|*.jpg|Jpeg|*.jpeg|PNG|*.png";
ImageFormat format = ImageFormat.Jpeg;
if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
if (sfd.FileName.ToLower().EndsWith(".png")) format = ImageFormat.Png;
// ..and here!
}
((Bitmap)pictureBox1.Image).SetResolution(ImgDpi.X, ImgDpi.Y);
pictureBox1.Image.Save(sfd.FileName, format);
}
显然,我会收到此RuntimeWarning错误。所以我的问题是: 是否有可能写出这样的东西:如果我除以零,写0作为结果?
我想如果我除以0,我会得到一个NaN?
那么每次出现错误时我如何进行操作并将结果替换为零?
谢谢你的帮助!
答案 0 :(得分:1)
似乎您只想在mask_array
为0的情况下将所有元素设置为零。
您可以使用以下方法将所有这些元素设置为零:
result = array_1.copy()
result[mask_array == 0] = 0 # Indexes all elements that are zero and sets them to zero.
或者您也可以使用numpy.ma.MaskedArray
:
result = np.ma.array(array1.copy(), mask=mask_array)
然后用它进行操作。
@schwobaseggl的评论也非常有用,因为你可能想要乘法而不是除法:
array1 = np.array([1, 2, 3, 4])
mask = np.array([1, 0, 1, 0])
array1 * mask
# gives: array([1, 0, 3, 0])