我在将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.我想获得1-D数组:[-0.0174428 -0.01855013 ... 0.01137508 0.00577147]大小(200,)。 d是200。
EDIT2:randn来自numpy.random(来自numpy.random import randn)
答案 0 :(得分:4)
您的prior
很可能是np.matrix
,是ndarray
的子类。 np.matrix
始终是2D。因此nu
是np.matrix
,也是2D。
要使其1D
,请先将其转换为常规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,)