如何理解a.reshape(3,*(3,4))中*(3,4)的用法?

时间:2016-09-27 08:50:26

标签: python numpy

import numpy as np
a = np.arange(36)
print a.shape

(36)

a = a.reshape(3,*(3,4))
print a.shape

(适用3,3,4)

首先,我认为*(3,4)可能是一个参数。所以我帮助(np.reshape)

a : array_like
    Array to be reshaped.
newshape : int or tuple of ints
    The new shape should be compatible with the original shape. If
    an integer, then the result will be a 1-D array of that length.
    One shape dimension can be -1. In this case, the value is inferred
    from the length of the array and remaining dimensions.
order : {'C', 'F', 'A'}, optional
    Read the elements of `a` using this index order, and place the elements
    into the reshaped array using this index order.  'C' means to
    read / write the elements using C-like index order, with the last axis
    index changing fastest, back to the first axis index changing slowest.
    'F' means to read / write the elements using Fortran-like index order,
    with the first index changing fastest, and the last index changing
    slowest.
    Note that the 'C' and 'F' options take no account of the memory layout
    of the underlying array, and only refer to the order of indexing.  'A'
    means to read / write the elements in Fortran-like index order if `a`
    is Fortran *contiguous* in memory, C-like order otherwise.

我找不到可以匹配*(3,4)的正确参数。那么如何以这种方式理解*(3,4)的用法?

2 个答案:

答案 0 :(得分:2)

*(3,4)解包元组,使其与执行a.reshape(3,3,4)完全相同。如果(3,4)是一个变量,那么使用他解包是真的有意义,即:

t = (3,4)
a.reshape(3,*t) # same as a.reshape(3, t[0], t[1])

答案 1 :(得分:-1)

*将解压缩值。 所以,a = a.reshape(3,*(3,4))a = a.reshape(3, 3, 4)相同 结果是(3,3,4)