How to reshape a Numpy array from (x,y,z) to (y,z,x)

numpy reshape
numpy 2d array
numpy reshape 3d to 2d
numpy reshape 1d to 2d
transform np array
reshape(-1 1)
numpy one-dimensional array
numpy transpose 3d array

I have an array of dimension (3,120,100) and I want to convert it into an array of dimensions (120,100,3). The array I have is

arr1 = np.ones((120,100), dtype = int)
arr2 = arr1*2
arr3 = arr1*3
arr = np.stack((arr1,arr2,arr3))
arr

It contains three 120x100 arrays of 1's, 2's, and 3's. When I use reshape on it, I get 120x100 arrays of 1's, 2's, or 3's.

I want to get an array of 120x100 where each element is [1,2,3]

If you want a big array containing 1, 2 and 3 as you describe, user3483203's answer would be the recommendable option. If you have, in general, an array with shape (X, Y, Z) and you want to have it as (Y, Z, X), you would normally use np.transpose:

import numpy as np

arr = ... # Array with shape (3, 120, 100)
arr_reshaped = np.transpose(arr, (1, 2, 0))
print(arr_reshaped.shape)
# (120, 100, 3)

EDIT: The question title says you want to reshape an array from (X, Y, Z) to (Z, Y, X), but the text seems to suggest you want to reshape from (X, Y, Z) to (Y, Z, X). I followed the text, but for the one in the title it would simply be np.transpose(arr, (2, 1, 0)).

python - How to reshape a Numpy array from (x,y,z) to (y,z,x), If you have, in general, an array with shape (X, Y, Z) and you want to have it as (Y​, Z, X) , you would normally use np.transpose : import numpy as np arr = . The reshape () function is used to give a new shape to an array without changing its data. numpy.reshape (a, newshape, order='C') Version: 1.15.0. Array to be reshaped. 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

You don't need to create a very large array and reshape. Since you know what you want each element to be, and the final shape, you can just use numpy.broadcast_to. This requires a setup of just creating a shape (3,) array.

Setup

arr = np.array([1,2,3])

np.broadcast_to(arr, (120, 100, 3))

array([[[1, 2, 3],
        [1, 2, 3],
        [1, 2, 3],
        ...,
        [1, 2, 3],
        [1, 2, 3],
        [1, 2, 3]],

       [[1, 2, 3],
        [1, 2, 3],
        [1, 2, 3],
        ...,
        [1, 2, 3],
        [1, 2, 3],
        [1, 2, 3]]])

To get a non read-only version of this output, you can call copy():

out = np.broadcast_to(arr, (120, 100, 3)).copy()

np.reshape - Numpy and Scipy, import numpy as np import matplotlib. pyplot as plt from scipy. stats import mu 1 = np. array ([0, 0]) muz = np. array ( [2, 2]) Sigma 1 = np. array ([[ 1, 0.3] , [0. 3, 1] ]) Sigma2 5* mvn2. pdf (xy). reshape (x. shape) ) plt. contour (x, y, z) z1 = ( 0. In python, reshaping numpy array can be very critical while creating a matrix or tensor from vectors. In order to reshape numpy array of one dimension to n dimensions one can use np.reshape () method. Let’s check out some simple examples. It is very important to reshape you numpy array, especially you are training with some deep learning network.

I'll answer this assuming it's part of a larger problem, and this is just example data to demonstrate what you want to do. Otherwise the broadcasting solution works just fine.

When you use reshape it doesn't change how numpy interprets the order of individual elements. It simply affects how numpy views the shape. So, if you have elements a, b, c, d in an array on disk that can be interpreted as an array of shape (4,), or shape (2, 2), or shape (1, 4) and so on.

What it seems you're looking for is transpose. This affects allows swapping how numpy interprets the axes. In your case

>>>arr.transpose(2,1,0)
array([[[1, 2, 3],
    [1, 2, 3],
    [1, 2, 3],
    ..., 
    [1, 2, 3],
    [1, 2, 3],
    [1, 2, 3]]])

Data Science and Machine Learning: Mathematical and Statistical , Z = Z. reshape (X. shape) plt. contourf(X,Y,Z > 0, alpha=0.4) plt. contour(X,Y,Z, mp import matplotlib. pyplot as plt from sklearn import svm X = np. array([[1,3],  NumPy provides the reshape() function on the NumPy array object that can be used to reshape the data. The reshape() function takes a single argument that specifies the new shape of the array. In the case of reshaping a one-dimensional array into a two-dimensional array with one column, the tuple would be the shape of the array as the first

Python Data Analytics: Data Analysis and Science using pandas, , 4.0, 100) X, Y = np.meshgrid (xlist, ylist) Z = Y ++ 2 / 2 – 5 + np. cos(X) plt. figure array ([fun (x, y) for x, y in zip (np.ravel (X), np. ravel (Y))]) Z = zs. reshape (X. Data manipulation in Python is nearly synonymous with NumPy array manipulation: even newer tools like Pandas are built around the NumPy array.This section will present several examples of using NumPy array manipulation to access data and subarrays, and to split, reshape, and join the arrays.

Dynamical Systems with Applications using Python, Understand axis and shape properties for n-dimensional arrays. -2:0.8:w*1j ] c = x+y*1j z = c divtime = maxit + np.zeros(z.shape, dtype=int) for i in  numpy.reshape - This function gives a new shape to an array without changing the data. It accepts the following parameters −

Quickstart tutorial, Attributes of arrays: Determining the size, shape, memory consumption, and data types of arrays; Indexing of z = [99, 99, 99] print(np.concatenate([x, y, z])). numpy.fromfunction¶ numpy.fromfunction (function, shape, *, dtype=<class 'float'>, **kwargs) [source] ¶ Construct an array by executing a function over each coordinate. The resulting array therefore has a value fn(x, y, z) at coordinate (x, y, z). Parameters function callable. The function is called with N parameters, where N is the rank of

Comments
  • Did you try an axis parameter for stack? like np.stack([arr1, arr2, arr3], axis=2)?
  • Possible duplicate of How to transpose a 3D matrix? besides transpose you could also use swapaxes or moveaxis (see link)
  • You beat me to it. This is definitely the correct way for arbitrary arrays.
  • The result of broadcast_to is a view of the original array. Cells are not independently modifiable, because many cells are views of the same memory location; for example, writing to index 0, 0, 0 will affect index 1, 2, 0, as well as any index of the form i, j, 0.
  • @user2357112 That is true but that does not seem to be a concern for the OP.
  • @user2357112 From their requirements, they don't specify needing to actually edit any of these values, but added a clarification using copy(). But when you say "cells are not independently modifiable", cells are not actually modifiable at all in the original result, it's a read only view, you can't write to any of the cells
  • @LeonardShaw, if this answers your question please accept it, or the answer posted earlier by jdehesa.