【问题标题】:how to pass from numpy matrix to numpy array?如何从 numpy 矩阵传递到 numpy 数组?
【发布时间】:2013-11-26 06:35:39
【问题描述】:

我是 Python 和 Numpy 的新手,所以我的问题的标题可能是错误的。

我从 matlab 文件中加载一些数据

data=scipy.io.loadmat("data.mat")
x=data['x']
y=data['y']
>>> x.shape
(2194, 12276)
>>> y.shape
(2194, 1)

y 是一个向量,我想要y.shape = (2194,)

我不知道(2194,)(2194,1) 之间的区别,但如果您尝试加载y 使得y.shape=(2194,1) ,sklearn.linear_model.LassoCV 似乎会遇到错误。

那么如何更改我的y 向量以获得y.shape=(2194,)??

【问题讨论】:

    标签: python arrays numpy scikit-learn


    【解决方案1】:

    先转换成数组,再挤压去掉多余的维度:

    y = y.A.squeeze()
    

    分步:

    In [217]: y = np.matrix([1,2,3]).T
    
    In [218]: y
    Out[218]: 
    matrix([[1],
            [2],
            [3]])
    
    In [219]: y.shape
    Out[219]: (3, 1)
    
    In [220]: y = y.A
    
    In [221]: y
    Out[221]: 
    array([[1],
           [2],
           [3]])
    
    In [222]: y.shape
    Out[222]: (3, 1)
    
    In [223]: y.squeeze()
    Out[223]: array([1, 2, 3])
    
    In [224]: y = y.squeeze()
    
    In [225]: y.shape
    Out[225]: (3,)
    

    【讨论】:

    • 我喜欢y.A 语法(我相信它是y.__array__() 的别名)来获得比np.asarray 更好的底层数组。
    • 好的,谢谢!但是你能稍微解释一下大小为 (2194,) 和 (2194,1) 的元素之间的区别吗?
    • 数据相同,但shape不同;维数也是如此 (ndim)。进入 Python shell,导入 numpy,然后玩弄一个小数组。查看形状和 ndim,转置、挤压、转换为矩阵并返回。添加维度。在 matlab 中,数组至少有 2 个维度。 numpy 矩阵是在不能有更多维度的旧 matlab 数组上建模的。
    • @Donbeo,正如@hpaulj 所说,它们是相同的数据,只是视图不同。随着您对 numpy 越来越熟悉,view vs a copy 的概念将变得很重要。某些动作会给出一个视图,例如,reshape 和切片(a[:10] 是前十项的视图),np.asarray 尽可能不复制数据。其他人制作副本,例如,np.array 和 'fancy indexing' a[a>5] 都返回副本。
    猜你喜欢
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 2015-02-04
    • 2020-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多