def corrcoef(x, y=None, rowvar=True, bias=False, allow_masked=True, ddof=None):
<EOL>if ddof is not None and ddof != int(ddof):<EOL><INDENT>raise ValueError("<STR_LIT>")<EOL><DEDENT>if ddof is None:<EOL><INDENT>if bias:<EOL><INDENT>ddof = <NUM_LIT:0><EOL><DEDENT>else:<EOL><INDENT>ddof = <NUM_LIT:1><EOL><DEDENT><DEDENT>(x, xnotmask, rowvar) = _covhelper(x, y, rowvar, allow_masked)<EOL>if not rowvar:<EOL><INDENT>fact = np.dot(xnotmask.T, xnotmask) * <NUM_LIT:1.> - ddof<EOL>c = (dot(x.T, x.conj(), strict=False) / fact).squeeze()<EOL><DEDENT>else:<EOL><INDENT>fact = np.dot(xnotmask, xnotmask.T) * <NUM_LIT:1.> - ddof<EOL>c = (dot(x, x.T.conj(), strict=False) / fact).squeeze()<EOL><DEDENT>try:<EOL><INDENT>diag = ma.diagonal(c)<EOL><DEDENT>except ValueError:<EOL><INDENT>return <NUM_LIT:1><EOL><DEDENT>if xnotmask.all():<EOL><INDENT>_denom = ma.sqrt(ma.multiply.outer(diag, diag))<EOL><DEDENT>else:<EOL><INDENT>_denom = diagflat(diag)<EOL>n = x.shape[<NUM_LIT:1> - rowvar]<EOL>if rowvar:<EOL><INDENT>for i in range(n - <NUM_LIT:1>):<EOL><INDENT>for j in range(i + <NUM_LIT:1>, n):<EOL><INDENT>_x = mask_cols(vstack((x[i], x[j]))).var(axis=<NUM_LIT:1>, ddof=ddof)<EOL>_denom[i, j] = _denom[j, i] = ma.sqrt(ma.multiply.reduce(_x))<EOL><DEDENT><DEDENT><DEDENT>else:<EOL><INDENT>for i in range(n - <NUM_LIT:1>):<EOL><INDENT>for j in range(i + <NUM_LIT:1>, n):<EOL><INDENT>_x = mask_cols(<EOL>vstack((x[:, i], x[:, j]))).var(axis=<NUM_LIT:1>, ddof=ddof)<EOL>_denom[i, j] = _denom[j, i] = ma.sqrt(ma.multiply.reduce(_x))<EOL><DEDENT><DEDENT><DEDENT><DEDENT>return c / _denom<EOL>
Return correlation coefficients of the input array.

Except for the handling of missing data this function does the same as
`numpy.corrcoef`. For more details and examples, see `numpy.corrcoef`.

Parameters
----------
x : array_like
    A 1-D or 2-D array containing multiple variables and observations.
    Each row of `x` represents a variable, and each column a single
    observation of all those variables. Also see `rowvar` below.
y : array_like, optional
    An additional set of variables and observations. `y` has the same
    shape as `x`.
rowvar : bool, optional
    If `rowvar` is True (default), then each row represents a
    variable, with observations in the columns. Otherwise, the relationship
    is transposed: each column represents a variable, while the rows
    contain observations.
bias : bool, optional
    Default normalization (False) is by ``(N-1)``, where ``N`` is the
    number of observations given (unbiased estimate). If `bias` is 1,
    then normalization is by ``N``. This keyword can be overridden by
    the keyword ``ddof`` in numpy versions >= 1.5.
allow_masked : bool, optional
    If True, masked values are propagated pair-wise: if a value is masked
    in `x`, the corresponding value is masked in `y`.
    If False, raises an exception.
ddof : {None, int}, optional
    .. versionadded:: 1.5
    If not ``None`` normalization is by ``(N - ddof)``, where ``N`` is
    the number of observations; this overrides the value implied by
    ``bias``. The default value is ``None``.

See Also
--------
numpy.corrcoef : Equivalent function in top-level NumPy module.
cov : Estimate the covariance matrix.