Initialize Empty Matrix in Python

I am trying to convert a MATLAB code in Python. I don't know how to initialize empty matrix in Python.

MATLAB Code:

demod4(1) = [];

I tried in Python

demod4[0] = array([])

but it gives error:

only length-1 arrays can be converted to Python scalars
3

8 Answers

If you are using numpy arrays, you initialize to 0, by specifying the expected matrix size:

import numpy as np
d = np.zeros((2,3))

>>> d
    [[ 0.  0.  0.]
     [ 0.  0.  0.]]

This would be the equivalent of MATLAB 's:

d = zeros(2,3);

You can also initialize an empty array, again using the expected dimensions/size

d = np.empty((2,3))

If you are not using numpy, the closest somewhat equivalent to MATLAB's d = [] (i.e., a zero-size matrix) would be using an empty list and then

append values (for filling a vector)

d = []
d.append(0)
d.append(1)
>>> d                                                                     
[0, 1]

or append lists (for filling a matrix row or column):

d = []                                                                
d.append(range(0,2))                                                    
d.append(range(2,4))                                                  
>>> d                                                                     
[[0, 1], [2, 3]]

See also:

initialize a numpy array (SO)

NumPy array initialization (fill with identical values) (SO)

How do I create an empty array/matrix in NumPy? (SO)

NumPy for MATLAB users

You could use a nested list comprehension:

# size of matrix n x m
matrix = [ [ 0 for i in range(n) ] for j in range(m) ]
1

What about initializing a list, populating it, then converting to an array.

demod4 = []  

Or, you could just populate at initialization using a list comprehension

demod4 = [[func(i, j) for j in range(M)] for i in range(N)]

Or, you could initialize an array of all zeros if you know the size of the array ahead of time.

demod4 = [[0 for j in range(M)] for i in range(N)]

or

demod4 = [[0 for i in range(M)]*N]

Or try using numpy.

import numpy as np

N, M = 100, 5000
np.zeros((N, M))
1

To init matrix with M rows and N columns you can use following pattern:

M = 3
N = 2
matrix = [[0] * N for _ in range(M)]

If you want to initialize the matrix with 0s then use the below code

# for m*n matrix
matrix = [[0] * m for i in range(n)]
M=[]
n=int(input())
m=int(input())
for j in range(n):
   l=[]
   for k in range(m):
       l.append(0)
   M.append(l)
print(M)

This is the traditional way of doing it matrix[m,n], However, python offers many cool ways of doing so as mentioned in other answers.

i find that this method is the easies method to create a matrix

    rows = 3
    columns = 4
    matrix = [[0] * columns] * rows

my output:


    [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

if you want to print the matrix use this:

    for i in range(rows):
         for j in range(columns):
             print(matrix[i][j], end=' ')
         print()

my output:

   0 0 0 0 
   0 0 0 0 
   0 0 0 0 
2
rows = 3
columns = 2
M = [[0]*columns]*rows

Or you could also use '' instead of 0

print(M)

Output:

M = [[0, 0], [0, 0], [0, 0]] 
1

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

David Miller

David Miller

Executive Financial & Market Analyst

David Miller brings 15 years of experience in global economics, personal finance strategy, and market dynamics. He specializes in turning complex economic trends into actionable insights for everyday readers.

Share this article
Twitter Facebook Pinterest