'How to get rid of excess nested array in Python

Nested Array

I want to turn the above into the below. This accidentally happened as I was doing a linear regression that the output was already in a 1x1 array, let me know if you would like to see more of my code. It looks like my betas variable is the issue with the nesting.

Normal Array

Generally speaking, I am just trying to get the output from

[[ array([x]), array([x]), array([x]), array([x]), array([x])]]

to
[[x, x, x, x, x ]]

def si_model():
    dj_data = pd.read_csv("/data.tsv", sep = "\t")
    dj_data = dj_data.pct_change().dropna()
    ann_dj_data = dj_data * 252
    dj_index = ann_dj_data['^DJI']
    ann_dj_data = ann_dj_data.drop('^DJI', axis='columns')
    
      # Function to Linear Regress Each Stock onto DJ
    def model_regress(stock):
        # Fit DJ to Index Data
        DJ = np.array(dj_index).reshape(len(stock), 1)

        # Regression of each stock onto DJ
        lm = LinearRegression().fit(DJ, y=stock.to_numpy())
        resids = stock.to_numpy() - lm.predict(DJ)

        return lm.coef_, lm.intercept_, resids.std()
    
    # Run model regression on each stock
    lm_all = ann_dj_data.apply(lambda stock: model_regress(stock)).T

    # Table of the Coeffeicents
    lm_all = lm_all.rename(columns={0: 'Beta       ', 1: 'Intercept', 2: 'Rsd Std'})
        
    # Varaince of the index's returns
    dj_index_var = dj_index.std() ** 2
        
    betas = lm_all['Beta       '].to_numpy()
    resid_vars = lm_all['Rsd Std'].to_numpy() ** 2
    
    # Single index approximation of covariance matrix using identity matrix (np.eye)
    Qsi = dj_index_var * betas * betas.reshape(-1, 1) + np.eye(len(betas)) * resid_vars
    return Qsi

# Printing first five rows of approximation
Qsi = si_model()
print("Covariance Matrix")
print(Qsi[:5, :5])


Solution 1:[1]

You can use squeeze().

Here is a small example similar to yours:

import numpy as np

a = np.array([17.1500691])
b = np.array([5.47690856])
c = np.array([5.47690856])
d = np.array([11.7700696])

e = list([[a,b],[c,d]])
print(e)

f = np.squeeze(np.array(e), axis=2)
print(f)

Output:

[[array([17.1500691]), array([5.47690856])], [array([5.47690856]), array([11.7700696])]]
[[17.1500691   5.47690856]
 [ 5.47690856 11.7700696 ]]

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 KarelZe