Read this path into a :class:`numpy.ndarray` as a text file using
        :func:`numpy.loadtxt`. In normal conditions the returned array is
        two-dimensional, with the first axis spanning the rows in the file and
        the second axis columns (but see the *unpack* and *dfcols* keywords).

        If *dfcols* is not None, the return value is a
        :class:`pandas.DataFrame` constructed from the array. *dfcols* should
        be an iterable of column names, one for each of the columns returned
        by the :func:`numpy.loadtxt` call. For convenience, if *dfcols* is a
        single string, it will by turned into an iterable by a call to
        :func:`str.split`.

        The remaining *kwargs* are passed to :func:`numpy.loadtxt`; they likely are:

	dtype : data type
	  The data type of the resulting array.
	comments : str
	  If specific, a character indicating the start of a comment.
	delimiter : str
	  The string that separates values. If unspecified, any span of whitespace works.
	converters : dict
	  A dictionary mapping zero-based column *number* to a function that will
	  turn the cell text into a number.
	skiprows : int (default=0)
	  Skip this many lines at the top of the file
	usecols : sequence
	  Which columns keep, by number, starting at zero.
	unpack : bool (default=False)
	  If true, the return value is transposed to be of shape ``(cols, rows)``.
	ndmin : int (default=0)
	  The returned array will have at least this many dimensions; otherwise
	  mono-dimensional axes will be squeezed.

def read_numpy_text (self, dfcols=None, **kwargs):
        """Read this path into a :class:`numpy.ndarray` as a text file using
        :func:`numpy.loadtxt`. In normal conditions the returned array is
        two-dimensional, with the first axis spanning the rows in the file and
        the second axis columns (but see the *unpack* and *dfcols* keywords).

        If *dfcols* is not None, the return value is a
        :class:`pandas.DataFrame` constructed from the array. *dfcols* should
        be an iterable of column names, one for each of the columns returned
        by the :func:`numpy.loadtxt` call. For convenience, if *dfcols* is a
        single string, it will by turned into an iterable by a call to
        :func:`str.split`.

        The remaining *kwargs* are passed to :func:`numpy.loadtxt`; they likely are:

	dtype : data type
	  The data type of the resulting array.
	comments : str
	  If specific, a character indicating the start of a comment.
	delimiter : str
	  The string that separates values. If unspecified, any span of whitespace works.
	converters : dict
	  A dictionary mapping zero-based column *number* to a function that will
	  turn the cell text into a number.
	skiprows : int (default=0)
	  Skip this many lines at the top of the file
	usecols : sequence
	  Which columns keep, by number, starting at zero.
	unpack : bool (default=False)
	  If true, the return value is transposed to be of shape ``(cols, rows)``.
	ndmin : int (default=0)
	  The returned array will have at least this many dimensions; otherwise
	  mono-dimensional axes will be squeezed.

        """
        import numpy as np

        if dfcols is not None:
            kwargs['unpack'] = True

        retval = np.loadtxt (text_type (self), **kwargs)

        if dfcols is not None:
            import pandas as pd
            if isinstance (dfcols, six.string_types):
                dfcols = dfcols.split ()
            retval = pd.DataFrame (dict (zip (dfcols, retval)))

        return retval