numpy sum结果和转置它给出相同的答案

时间:2015-07-15 21:41:13

标签: python numpy

我有一些麻烦要知道如何以正确的方式做这件事。

print np.sum(X,axis=1)

print np.sum(X,axis=1).T

给了我相同的结果。 解决问题的最佳方法是什么?

为什么不应该将这样的事情视为numpy中的错误?

例如:X=[[1,2],[3,4]]

对于第一个结果,我希望获得array([[3,7]]),并array([[3],[7]])获得第二个结果。也可能是相反的方式。真的很重要。

3 个答案:

答案 0 :(得分:4)

我认为你想先转置:

print np.sum(X.T,axis=1)

你在求和后得到一个平面数组,所以显然转换一个1d数组会在换位时给你与原始数组相同的输出。

In [14]: X=np.array([[1,2,3],[4,5,6]])    
In [15]: np.sum(X, axis=1)
Out[15]: array([ 6, 15])    
In [16]: np.sum(X, axis=1).T
Out[16]: array([ 6, 15])    
In [17]: np.sum(X.T, axis=1)
Out[17]: array([5, 7, 9])

答案 1 :(得分:4)

如果它在错误的轴上相加,为什么不改变呢?

>> np.sum(np.array([[1, 2, 3], [2, 3, 4]]), axis=1)
array([6, 9])

>> np.sum(np.array([[1, 2, 3], [2, 3, 4]]), axis=0)
array([3, 5, 7])

修改

您可以重新生成结果数组,如下所示:

>> np.sum(np.array([[1, 2, 3], [2, 3, 4]]), axis=1).reshape((2, 1))
array([[6],
    [9]])

答案 2 :(得分:1)

如果您想在计算总和后保留额外的单身维度,可以将keepdims=True传递给sum

X = np.array([[1, 2, 3], [2, 3, 4]])

print(np.sum(X, axis=0).shape)
# (3,)

print(np.sum(X, axis=0, keepdims=1).shape)
# (1, 3)

print(np.sum(X, axis=1, keepdims=1).shape)
# (2, 1)

除了使用keepdims之外,您还可以重新整形输出以插入新轴以替换在缩小中丢失的轴,例如:

# the '-1' here means that numpy will infer the size in the first dimension to
# match the number of elements in the result array
print(np.sum(X, axis=1).reshape(-1, 1).shape)
# (2, 1)

print(np.sum(X, axis=1)[:, np.newaxis].shape)
# (2, 1)

# indexing with 'None' is equivalent to 'np.newaxis'
print(np.sum(X, axis=1)[:, None].shape)
# (2, 1)