bundles / scipy 2.0.0.dev0+git20260907.41eeb59 / scipy / stats / _crosstab / crosstab
function
scipy.stats._crosstab:crosstab
source: build-install/usr/lib/python3.14/site-packages/scipy/stats/_crosstab.py:11
Signature
def crosstab(*args, levels = None, sparse = False)Summary
Return table of counts for each possible unique combination in *args.
Extended Summary
When len(args) > 1, the array computed by this function is often referred to as a contingency table [1].
The arguments must be sequences with the same length. The second return value, count, is an integer array with len(args) dimensions. If levels is None, the shape of count is (n0, n1, ...), where nk is the number of unique elements in args[k].
Parameters
*args: sequencesA sequence of sequences whose unique aligned elements are to be counted. The sequences in args must all be the same length.
levels: sequence, optionalIf
levelsis given, it must be a sequence that is the same length asargs. Each element inlevelsis either a sequence or None. If it is a sequence, it gives the values in the corresponding sequence inargsthat are to be counted. If any value in the sequences inargsdoes not occur in the corresponding sequence inlevels, that value is ignored and not counted in the returned arraycount. The default value oflevelsforargs[i]isnp.unique(args[i])sparse: bool, optionalIf True, return a sparse array. The array will be an instance of the scipy.sparse.coo_array class. Default is False.
Returns
res: CrosstabResultAn object containing the following attributes:
elements
Tuple of length
len(args)containing the arrays of elements that are counted incount. These can be interpreted as the labels of the corresponding dimensions ofcount. Iflevelswas given, then iflevels[i]is not None,elements[i]will hold the values given inlevels[i].count
Counts of the unique elements in
zip(*args), stored in an array. Also known as a contingency table whenlen(args) > 1.
Notes
Examples
from scipy.stats.contingency import crosstab
✓a = ['A', 'B', 'A', 'A', 'B', 'B', 'A', 'A', 'B', 'B'] x = ['X', 'X', 'X', 'Y', 'Z', 'Z', 'Y', 'Y', 'Z', 'Z'] res = crosstab(a, x) avals, xvals = res.elements avals xvals res.count✓
array([[2, 3, 0],
[1, 0, 4]])
So ``('A', 'X')`` occurs twice, ``('A', 'Y')`` occurs three times, etc.
Higher dimensional contingency tables can be created.
p = [0, 0, 0, 0, 1, 1, 1, 0, 0, 1] res = crosstab(a, x, p)✓
res.count
✗array([[[2, 0],
[2, 1],
[0, 0]],
[[1, 0],
[0, 0],
[1, 3]]])
res.count.shape
✓(2, 3, 2)The values to be counted can be set by using the `levels` argument. It allows the elements of interest in each input sequence to be given explicitly instead finding the unique elements of the sequence. For example, suppose one of the arguments is an array containing the answers to a survey question, with integer values 1 to 4. Even if the value 1 does not occur in the data, we want an entry for it in the table.
q1 = [2, 3, 3, 2, 4, 4, 2, 3, 4, 4, 4, 3, 3, 3, 4] # 1 does not occur. q2 = [4, 4, 2, 2, 2, 4, 1, 1, 2, 2, 4, 2, 2, 2, 4] # 3 does not occur. options = [1, 2, 3, 4] res = crosstab(q1, q2, levels=(options, options)) res.count✓
array([[0, 0, 0, 0],
[1, 1, 0, 1],
[1, 4, 0, 1],
[0, 3, 0, 3]])
If `levels` is given, but an element of `levels` is None, the unique values
of the corresponding argument are used. For example,
res = crosstab(q1, q2, levels=(None, options)) res.elements res.count✓
array([[1, 1, 0, 1],
[1, 4, 0, 1],
[0, 3, 0, 3]])
If we want to ignore the pairs where 4 occurs in ``q2``, we can
give just the values [1, 2] to `levels`, and the 4 will be ignored:
res = crosstab(q1, q2, levels=(None, [1, 2])) res.elements res.count✓
array([[1, 1],
[1, 4],
[0, 3]])
Finally, let's repeat the first example, but return a sparse array:
res = crosstab(a, x, sparse=True)
✓res.count
✗<COOrdinate sparse array of dtype 'int64' with 4 stored elements and shape (2, 3)>
res.count.toarray()
✓array([[2, 3, 0],
[1, 0, 4]])
See also
- numpy.unique
Aliases
scipy.stats._crosstab.crosstab