2017-08-13 125 views
1

尽管我已经看到这个问题的一些答案,我想知道是否有任何更好的方法来解决这个问题。numpy数组与第二维空

例如,

N = 15 
A = np.repeat(1/N, N) 

如果我这样做的结果将有形状(15)

如果我想要的形状为(15,1),我想我能做到

A = np.repeat(1/N, N)[:,np.newaxis] 

我也有同样的问题与

np.ones(N); np.zeros(N) 

我可以使第二个维度为1,通过使用“np.newaxis”

但我的问题是,有没有更好的方法来做到这一点?

+0

尝试A = A.reshape((15,1)) –

+0

使用'np.newaxis'是这个任务的一个很好的工具(尽管我使用了较短的'None')。有一个最低速度罚款。这个习语很清楚(对有经验的用户)。在许多其他情况下它也很有用。 – hpaulj

+0

@hpaulj,请解释我为什么我的解释不是最优? –

回答

1

对于np.onesnp.zeros可以传递一个元组指定输出阵列的形状:

np.ones((N, 1)); np.zeros((N, 1)) 

对于np.repeat,则可能需要传递的阵列(或列表)已经具有两个维度,然后重复沿期望的轴:

>>> np.repeat([[1./N]], N, axis=0) 
array([[ 0.06666667], 
     [ 0.06666667], 
     [ 0.06666667], 
     [ 0.06666667], 
     [ 0.06666667], 
     [ 0.06666667], 
     [ 0.06666667], 
     [ 0.06666667], 
     [ 0.06666667], 
     [ 0.06666667], 
     [ 0.06666667], 
     [ 0.06666667], 
     [ 0.06666667], 
     [ 0.06666667], 
     [ 0.06666667]]) 

但是,该语法更难以阅读/理解,并且没有额外的表现。您可以坚持像您所示的那样向阵列添加一个新的轴。

+0

将多余的维度添加到'ones'是有道理的。像这样调整“重复”会更慢,更难理解。 'np.full'更快。 – hpaulj

+0

@hpaulj感谢您的注意。实际上没有时间来看看哪个工作更快。增加了一些关于此的评论。 –