我有一些麻烦要知道如何以正确的方式做这件事。
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]])
获得第二个结果。也可能是相反的方式。真的很重要。
答案 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)