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

(36,)

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

(3,3,4)

Firstly, I think *(3,4) may be a parameter. So I help(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.

I can not find the correct parameter which can match *(3,4).So how can I comprehend the usage of *(3,4) in this way?

Rachel Jennifer
  • 493
  • 1
  • 4
  • 16

2 Answers2

4

*(3,4) unpacks the tuple so it is exactly the same as doing a.reshape(3,3,4). It would only really make sense to use he unpacking if (3,4) was a variable i.e:

t = (3,4)
a.reshape(3,*t) # same as a.reshape(3, t[0], t[1])
Padraic Cunningham
  • 176,452
  • 29
  • 245
  • 321
-1

The * will unpack the value. so, a = a.reshape(3,*(3,4)) is same to a = a.reshape(3, 3, 4) and the result is (3, 3, 4)