numpy meshgrid过滤掉点

时间:2016-07-14 20:12:58

标签: python numpy

我有一个numpy的网格。我对这些要点进行了一些计算。我想过滤掉由于某种原因无法进行加权处理的点(除以零)。

        //CustomAlertDialogPopUp
public void submitButton(View v) {

    LayoutInflater inflater = getLayoutInflater();
    View alertLayout = inflater.inflate(R.layout.alertXML, null);

    AlertDialog.Builder alert = new AlertDialog.Builder(this);
    alert.setTitle("Alert");
    alert.setView(alertLayout);

    AlertDialog dialog = alert.create();
    dialog.show();


    EditText text1 = (EditText)findViewById(R.id.inputText);
    TextView text2 = (TextView)findViewById(R.id.alertText);
    String result = text1.getText().toString();
    text2.setText(result);

}

1 个答案:

答案 0 :(得分:1)

要使用这些z / ( y - x )网格数组执行3D,您可以创建有效网格数组的掩码。现在,有效的那些是yx之间的任何一对组合都不相同的那些。因此,此蒙版的形状为(M,N),其中MN分别是YX轴的长度。要让这样的掩码跨越XY之间的所有组合,我们可以使用NumPy's broadcasting。因此,我们会有这样的面具 -

mask = Yout[:,None] != Xout

最后,再次使用广播沿着3D数组的前两个轴广播掩码,我们可以执行这样的除法,并使用np.where在无效的说明符和实际除法结果之间进行选择,就像这样 -

invalid_spec = 0
out = np.where(mask[...,None],Zout_3d/(Yout_3d-Xout_3d),invalid_spec)

或者,我们可以使用广播直接获得这样的输出,从而避免使用meshgrid并在工作空间中使用那些重3D个数组。我们的想法是同时填充3D网格,并在运行中执行减法和除法计算。所以,实现看起来像这样 -

np.where(mask[...,None],Zout/(Yout[:,None,None] - Xout[:,None]),invalid_spec)