如何从 numpy 矩阵传递到 numpy 数组?
Posted
技术标签:
【中文标题】如何从 numpy 矩阵传递到 numpy 数组?【英文标题】:how to pass from numpy matrix to numpy array? 【发布时间】: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,)
??
【问题讨论】:
【参考方案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]
都返回副本。以上是关于如何从 numpy 矩阵传递到 numpy 数组?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 numpy.matrix 或数组转换为 scipy 稀疏矩阵
从 scipy CSR 矩阵索引到 numpy 数组的最有效方法?
NumPy 2d 数组的切片,或者如何从 nxn 数组 (n>m) 中提取 mxm 子矩阵?
TypeError:传递了稀疏矩阵,但需要密集数据。使用 X.toarray() 转换为密集的 numpy 数组。使用 NaiveBayes 分类器