python-NumPy-将数组重塑为一维

我在将NumPy数组转换为1-D时遇到问题.我调查了在SO上发现的想法,但问题仍然存在.

nu = np.reshape(np.dot(prior.T, randn(d)), -1)
print 'nu1', str(nu.shape)
print nu
nu = nu.ravel()
print 'nu2', str(nu.shape)
print nu
nu = nu.flatten()
print 'nu3', str(nu.shape)
print nu
nu = nu.reshape(d)
print 'nu4', str(nu.shape)
print nu

该代码产生以下输出:

nu1 (1, 200)
[[-0.0174428  -0.01855013 ... 0.01137508  0.00577147]]
nu2 (1, 200)
[[-0.0174428  -0.01855013 ... 0.01137508  0.00577147]]
nu3 (1, 200)
[[-0.0174428  -0.01855013 ... 0.01137508  0.00577147]]
nu4 (1, 200)
[[-0.0174428  -0.01855013 ... 0.01137508  0.00577147]]

您认为可能是什么问题?我在做什么错?

编辑:先验是(200,200),d是200.我想获得一维数组:[-0.0174428 -0.01855013 … 0.01137508 0.00577147]的大小(200,). d是200

EDIT2:randn也来自numpy.random(来自numpy.random import randn)

解决方法:

您的先验很可能是np.matrix,它是ndarray的子​​类. np.matrixs始终是2D.所以nu是一个np.matrix,也是2D的.

要使其变为一维,首先将其转换为常规ndarray:

nu = np.asarray(nu)

例如,

In [47]: prior = np.matrix(np.random.random((200,200)))

In [48]: d = 200

In [49]: nu = np.reshape(np.dot(prior.T, randn(d)), -1)

In [50]: type(nu)
Out[50]: numpy.matrixlib.defmatrix.matrix

In [51]: nu.shape
Out[51]: (1, 200)

In [52]: nu.ravel().shape
Out[52]: (1, 200)

但是,如果您将nu设为ndarray:

In [55]: nu = np.asarray(nu)

In [56]: nu.ravel().shape
Out[56]: (200,)
上一篇:python-在SciPy / NumPy中查找复杂函数的零


下一篇:可以在Scipy中的Mann-Whitney U检验中指定替代假设吗?