如何在numpy.linalg.norm中获取所需的形状

时间:2017-03-18 03:32:02

标签: python-2.7 numpy

如果我有一个numpy数组

A=[[-4. -4. -4.]    #(6,3)
[-8. -8. -8.]
[-1. -1. -1.]
[-5. -5. -5.]
[ 2.  2.  2.]
[-2. -2. -2.]]

我需要每行的规范为(2,3) 我的解决方案是:

np.linalg.norm(A,axis=1)

我的输出是

[6.92820323  13.85640646   1.73205081   8.66025404   3.46410162  3.46410162]

必需的输出是:

[[  6.92820323  13.85640646]
[  1.73205081   8.66025404]
[  3.46410162   3.46410162]]

我希望只需一步即可获得所需的输出,而无需重新生成结果numpy数组。因为我有一个大数据集,我必须重复执行此操作。 有什么建议吗?

2 个答案:

答案 0 :(得分:1)

你确定这值得吗?重塑很便宜:

a = np.random.random((6,3))
timeit(lambda: np.linalg.norm(a, axis=-1), number=10**6)
# 5.118775532988366

a = np.random.random((6,))
timeit(lambda: a.reshape(3, 2), number=10**6)
# 0.36718635002034716

答案 1 :(得分:0)

您可以使用ndarray.reshape()解决问题

A=[[-4., -4., -4.],   #(6,3)
[-8., -8., -8.],
[-1., -1., -1.],
[-5., -5., -5.],
[ 2.,  2.,  2.],
[-2., -2., -2.]]
A = np.array(A)
ans = np.linalg.norm(A,axis=1).reshape((3,2))