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