Numpy矩阵到数组

yas*_*sin 140 python arrays numpy matrix

我正在使用numpy.我有一个包含1列和N行的矩阵,我想从N个元素中获取一个数组.

例如,如果我有M = matrix([[1], [2], [3], [4]]),我想得到A = array([1,2,3,4]).

为了实现它,我使用A = np.array(M.T)[0].有谁知道更优雅的方式来获得相同的结果?

谢谢!

Joe*_*ton 180

If you'd like something a bit more readable, you can do this:

A = np.squeeze(np.asarray(M))
Run Code Online (Sandbox Code Playgroud)

Equivalently, you could also do: A = np.asarray(M).reshape(-1), but that's a bit less easy to read.

  • 对我来说有点咆哮......为什么numpy将数组和矩阵作为单独的实体.它是如此unpythonic恕我直言.感谢@Joe的这个提示. (9认同)
  • @Naijaba - 对于它的价值,矩阵类有效(但不是正式)折旧.它主要用于历史目的.删除`numpy.matrix`是一个有争议的问题,但是numpy开发者非常同意你的观点,认为两者都是unpythonic并且因为一系列原因而烦人.但是,使用`matrix`的"野外"旧的,未维护的代码的数量使得很难完全删除它. (6认同)
  • 稀疏矩阵是内存高效的机器学习(例如“sklearn”)的基础。事实上,“scipy”中有不同的“稀疏矩阵”类型,它们允许通过行或列进行有效访问。我想这可能是合并矩阵和数组概念的问题。也就是说,我想知道是否也可以引入“稀疏数组”类型以及是否有任何计划这样做。有什么线索吗? (2认同)

hpa*_*ulj 117

result = M.A1
Run Code Online (Sandbox Code Playgroud)

https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.matrix.A1.html

matrix.A1
1-d base array
Run Code Online (Sandbox Code Playgroud)

  • 我认为这个答案比接受的答案,性能方面和简单性要好 (6认同)

小智 13

A, = np.array(M.T)
Run Code Online (Sandbox Code Playgroud)

取决于我所说的优雅你的意思,但这就是我会做的


bub*_*ble 10

您可以尝试以下变体:

result=np.array(M).flatten()
Run Code Online (Sandbox Code Playgroud)


Pie*_* GM 6

或者你可以尝试避免一些临时性

A = M.view(np.ndarray)
A.shape = -1
Run Code Online (Sandbox Code Playgroud)


小智 6

np.array(M).ravel()
Run Code Online (Sandbox Code Playgroud)

如果你关心速度; 但如果你关心记忆:

np.asarray(M).ravel()
Run Code Online (Sandbox Code Playgroud)

  • 如果您解释原因,将会提高您答案的质量 (2认同)