I Want to Reshape 2D Array into 3D Array

Numpy 2D to 3D array based on data in a column

You can try code below:

import numpy as np
array = np.array([[1, 3, 4, 6],
[1, 4, 8, 2],
[1, 3, 2, 9],
[2, 2, 4, 8],
[2, 4, 9, 1],
[2, 2, 9, 3]])
array = np.delete(array, 0, 1)
array.reshape(2,3,-1)

Output

array([[[3, 4, 6],
[4, 8, 2],
[3, 2, 9]],

[[2, 4, 8],
[4, 9, 1],
[2, 9, 3]]])

However, this code can be used when you are aware of the array's shape. But if you are sure that the number of columns in the array is a multiple of 3, you can simply use code below to show the array in the desired format.

array.reshape(array.shape[0]//3,3,-3)

Convert 2D array to 3D numpy array

You need to use

 data.reshape((data.shape[0], data.shape[1], 1))

Example

from numpy import array
data = [[11, 22],
[33, 44],
[55, 66]]
data = array(data)
print(data.shape)
data = data.reshape((data.shape[0], data.shape[1], 1))
print(data.shape)

Running the example first prints the size of each dimension in the 2D array, reshapes the array, then summarizes the shape of the new 3D array.

Result

(3,2)
(3,2,1)

Source :https://machinelearningmastery.com/index-slice-reshape-numpy-arrays-machine-learning-python/

Convert a 2D array into 3D array repeating existing values

You could use numpy.repeat function

https://numpy.org/doc/stable/reference/generated/numpy.repeat.html

array3d = np.repeat(array2d[:, :, None], repeats=3, axis=2)

How to Reshape 2D to 3D Array in Python?

It is easy to do with numpy using .reshape method:

A = np.array([[0,0,0,0,1], [1,0,0,0,0], [0,0,0,1,0], [0,1,0,0,0]])
A = A.reshape(2, 2, 5)
print(A.shape)

So new shape is (2, 2, 5). For your data you can just add a dummy dimension for a time step:

A = np.expan_dims(A, 1)

reshape 2D array into 3D array C

Your way of assigning the numbers to the newly allocated memory is wrong.

static int ***alloc_3d(int ar[][12],int rows, int cols,int levels,int colsize)
{

int count = 0;
int ***array_3d;
ZALLOC(array_3d, levels, int **);
int i1=0,j1=0;
for (i = 0; i < levels; i++)
{ ...
...
for (k = 0; k < cols; k++)
{
array_3d[i][j][k] = ar[i1][j1++];
if( j1 == colsize) i1++,j1=0;
}
}
}
return array_3d;
}

Call like this

int colsize = 12;
int ***a3d = alloc_3d(ar,d1, d2, d3,colsize);

This prints:

0:
0: 1 2 3
1: 4 5 6
1:
0: 7 8 9
1: 10 11 12
2:
0: 13 14 15
1: 16 17 18
3:
0: 19 20 21
1: 22 23 24

A small note - earlier your code had undefined behavior accessing array index out of the bound.

How do I reshape a 2d array into a 3d array for a neural network

The only way to make this run is without a CNN. Then, you just don't have to reshape. Speculative reshaping would just yield random pixels.

import numpy as np
import tensorflow as tf
from tensorflow.keras.layers import Dense
from tensorflow.keras.models import Sequential

X = np.random.randint(0, 256, (1945, 1800)) # fake data
y = np.random.randint(0, 38, 1945)

model = Sequential([
Dense(128, activation='relu', input_shape=(1800,)),
Dense(39)])

model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(
from_logits=True), metrics=['accuracy'])

hist = model.fit(X, y, epochs=10)

Ideally, you would fix your data and then you could run a CNN, which is the best model for this. A CNN maintains 2D relationships between pixels so it would be fantastic, but there is no relationship between your pixels if you don't know the correct shape.

How to make a 2d numpy array a 3d array?

In addition to the other answers, you can also use slicing with numpy.newaxis:

>>> from numpy import zeros, newaxis
>>> a = zeros((6, 8))
>>> a.shape
(6, 8)
>>> b = a[:, :, newaxis]
>>> b.shape
(6, 8, 1)

Or even this (which will work with an arbitrary number of dimensions):

>>> b = a[..., newaxis]
>>> b.shape
(6, 8, 1)


Related Topics



Leave a reply



Submit