2017-03-18 41 views
1

如果我有一个numpy的阵列如何获得所需的形状numpy.linalg.norm

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数组的大小。因为我有一个大的数据集,我必须重复执行此操作。 有什么建议吗?

回答

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)) 
+0

正如我所提到我想这一点没有重塑所得numpy的阵列。 –

+0

对不起,我没有看到。你想在一个步骤或只有一行代码解决它? – xiaoyi

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 
相关问题