Home > OS >  Numpy - Array to Matrix
Numpy - Array to Matrix

Time:01-25

I am writing a python script where I input a numpy array and return it as a matrix; however, with some of the values changed. Running this code, I get an error saying;

IndexError: arrays used as indices must be of integer (or boolean) type

arrays used as indices must be of integer (or boolean) type

I have attached my current function below

def w1(X):
    """
    Input:
    - X: A numpy array

    Returns:
    - A matrix Y such that Y[i, j] = X[i, j] * 10   100
    """

    Y = np.asmatrix(X)

    for i in Y:
        for j in i:
            Y[i,j] = Y[i,j] * 10   100
    return Y


CodePudding user response:

Try the following:

import numpy as np


    def w1(X):
        """
        Input:
        - X: A numpy array
    
        Returns:
        - A matrix Y such that Y[i, j] = X[i, j] * 10   100
        """
    
        # Y = np.asmatrix(X)  # you probably won't need this
    
        height, width = X.shape
    
        for i in range(height):
            for j in range(width):
                X[i, j] = X[i, j] * 10   100
        return X
    
    
    if __name__ == "__main__":
        h, w = 3, 4
        X = np.arange(1, h*w 1).reshape(h, w)
        print(X)
    
        print(w1(X.copy()))
    
        # much faster
        Y = X * 10   100
        print(Y)

CodePudding user response:

The answer written by Samuel is perfect. I'll elaborate on the mistake you made.

The error in your code is in the line

for i in Y:
    for j in i:

Y is a numpy matrix. Consider it as an array of numpy arrays. So when you write the above code, in each iteration, i is a complete row. When you write for j in i, j takes the actual values present in that row of the matrix instead of iterating through the column number of the particular row. That is why you are facing index issues in your method. Hope you got this!

  •  Tags:  
  • Related