diff --git a/xarray/core/computation.py b/xarray/core/computation.py index bf9ab56bbb4..ff582ccf3f4 100644 --- a/xarray/core/computation.py +++ b/xarray/core/computation.py @@ -314,6 +314,11 @@ def apply_dict_of_variables_ufunc(func, *args, **kwargs): result_vars = OrderedDict() for name, variable_args in zip(names, grouped_by_name): + if len(variable_args) == 1 and signature.all_input_core_dims: + variable_arg, = variable_args + if not set(variable_arg.dims) & signature.all_core_dims: + result_vars[name] = variable_arg + continue result_vars[name] = func(*variable_args) if signature.num_outputs > 1: diff --git a/xarray/tests/test_computation.py b/xarray/tests/test_computation.py index 1003c531018..b1876326155 100644 --- a/xarray/tests/test_computation.py +++ b/xarray/tests/test_computation.py @@ -3,6 +3,7 @@ import pickle from collections import OrderedDict from distutils.version import LooseVersion +from functools import partial import numpy as np import pandas as pd @@ -850,6 +851,17 @@ def apply_truncate_x_x_valid(obj): apply_truncate_x_x_valid(dataset)) +def test_ignore_variables_without_dim(): + + ds = xr.Dataset(dict( + a=xr.DataArray(np.random.rand(2, 3), dims=list('xy')), + b=xr.DataArray(np.random.rand(3, 4), dims=list('yz')) + )) + result = apply_ufunc(partial(np.nansum, axis=-1), + ds, input_core_dims=[['x']]) + assert set(result.dims) == set('yz') + + @pytest.mark.parametrize('use_dask', [True, False]) def test_dot(use_dask): if use_dask: