# NumPy.ravel() in Python with examples

In this article, We have explained NumPy.ravel() in Python with examples. where and how to use all orders supported by the NumPy.ravel() function

### What is NumPy.ravel() function in Python

The Numpy library provides a ravel() function that is used to convert an array from any shape to a 1-D array(flatten array). A 1-D array is a linear array. The array.ravel() function converts the 2-D or N-D arrays to the 1-D linear array.

Syntax

```numpy.ravel(array, order='C')
```

Parameters:

• Array: If you see the syntax then there are two arguments that this function accepts. The first argument is the array we want to flatten.
• Order: The second argument is used to provide the order in which we want to flatten our array. It means you can control the order as per your program’s needs.
• ‘C’: Read items from the array row-wise i.e.which is C-like index order. The default order index used for the ravel() function is ‘C’
• ‘F’: Read items from the array column-wise i.e. which is Fortran-like index order.
• ‘A’: means to read the elements in Fortran-like index order if a is Fortran contiguous in memory, C-like order otherwise.
• K’: Read items from an array based on the memory order of items, except for reversing the data when strides are negative.

Return value :

Return a contiguous flattened array which is a 1-D array, containing the elements of the input array. A copy is made only if needed. The returned array elements will be of the same type as the type of input array elements. (for example, a masked array will be returned for a masked array input)

### How does reval() function work?

• The first argument in the ravel() function is the array we have to provide (samplearray) as input, It returns a flattened array.
• We saw the default behavior of the ravel() function when we didn’t pass any second argument to it.

Important point: The returned array is a view of the original array. All the view concepts will apply to this new array.

```import numpy as np
samplearray = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
linear_array = np.ravel(samplearray)
print("Output Returned after ravel:",linear_array)
```

Output:

```(3, 3)
9
Output Returned after ravel: [1 2 3 4 5 6 7 8 9]
```

### reval() function order manipulation Examples

Now let us understand the different flavors of the ravel() function where we pass the order argument and decide the output order.

### 1. Using Row wise order C-like index order

Row-wise order simply means the elements of the input array are read row-wise and arranged in a 1-D array as output. Here C stands for C-like index order.

```import numpy as np
samplearray = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
linear_array = np.ravel(samplearray,order = 'C')
print("Array ravel row wise:",linear_array)
```

Output

```Array ravel row wise: [1 2 3 4 5 6 7 8 9]
```

### 2. Using Column wise order Fortran like index order.

Column-wise order simply means the elements of the input array are read column-wise and arranged in a 1-D array as output. Here F stands for Fortran-like index order.

```import numpy as np
samplearray = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
linear_array = np.ravel(samplearray,order = 'F')
print("Array ravel Column wise:",linear_array)
```

Output:

```Array ravel Column wise: [1 4 7 2 5 8 3 6 9]
```

### 3. Using memory order ‘A’

The third order that the ravel function supports is Order ‘A’. Before we see the application of the ravel() function by using third-order ‘A’,

• As per NumPy library documentation: ‘A’ means to read the elements in Fortran-like index order if a is Fortran contiguous in memory, otherwise in C-like order.
• To understand this we must understand what is Fortran’s contiguous in-memory layout of an array.
• When we perform an operation on an array then there is a possibility the memory layout is different from the original array.

Example: memory layout of samplearray :

```import numpy as np
samplearray = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
print(samplearray.flags)
```

Output:

```C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : True
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False
```

If we take a transposed view of this array.

```import numpy as np
samplearray = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
Transpose_view = samplearray.T
print(Transpose_view)
print(Transpose_view.flags)
```

If we check now the transpose_view looks like this:

Output:

```[[1 4 7]
[2 5 8]
[3 6 9]]
C_CONTIGUOUS : False
F_CONTIGUOUS : True
OWNDATA : False
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False
```

Now if we call the ravel() function on this view then we will get the 1-D array arranged column-wise based on the memory layout which is Fortran contiguous (F_CONTIGUOUS)

```import numpy as np
samplearray = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
Transpose_view = samplearray.T
print("Array ravel A Order:",np.ravel(Transpose_view,order= 'A'))
```

Output:

```Array ravel A Order: [1 2 3 4 5 6 7 8 9]
```

Similarly, if we call a ravel on samplearray , we will get a 1-D array arranged in row wise because it is C_CONTIGUOUS.

```print("Array ravel A Order:",np.ravel(samplearray,order= 'A'))
```

Output:

```Array ravel A Order: [1 2 3 4 5 6 7 8 9]
```

### 4. using memory order ‘K’

‘K’ means to read the elements in the order they occur in memory, except for reversing the data when strides are negative.

```import numpy as np
samplearray = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
Transpose_view = samplearray.T
print("Array ravel K Order:",np.ravel(Transpose_view,order= 'K'))
print("Array ravel K Order:",np.ravel(samplearray,order= 'K'))
```

Output:

```Array ravel K Order: [1 2 3 4 5 6 7 8 9]
#Array ravel K Order: [1 2 3 4 5 6 7 8 9]
```

Another example is:

```temp = np.arange(9).reshape(3,3).swapaxes(1,0)
print("temp array",temp)
print("C Order ravel on temp",np.ravel(temp,order='C'))
print("K Order ravel on temp",np.ravel(temp,order='K'))
```

Output

```temp array [[0 3 6]
[1 4 7]
[2 5 8]]
C Order ravel on temp [0 3 6 1 4 7 2 5 8]
K Order ravel on temp [0 1 2 3 4 5 6 7 8]
```