Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何按另一个2D数组对3D numpy数组的每一行进行排序?_Python_Arrays_Numpy_Numpy Ndarray - Fatal编程技术网

Python 如何按另一个2D数组对3D numpy数组的每一行进行排序?

Python 如何按另一个2D数组对3D numpy数组的每一行进行排序?,python,arrays,numpy,numpy-ndarray,Python,Arrays,Numpy,Numpy Ndarray,我有一个2D点的2D numpy数组: np.random.seed(0) a = np.random.rand(3, 4, 2) # each value is a 2D point 我想按照每一点的标准对每一行进行排序 norms = np.linalg.norm(a, axis=2) # shape(3, 4) indices = np.argsort(norms, axis=0) # indices of each sorted row 现在我想创建一个与a具有相同形状和值的

我有一个2D点的2D numpy数组:

np.random.seed(0)   
a = np.random.rand(3, 4, 2) # each value is a 2D point
我想按照每一点的标准对每一行进行排序

norms = np.linalg.norm(a, axis=2) # shape(3, 4)

indices = np.argsort(norms, axis=0) # indices of each sorted row
现在我想创建一个与
a
具有相同形状和值的数组。这将使每一行2D点按其范数排序

我怎样才能做到这一点

我尝试了np.take和np.take_沿_轴的变化,但没有成功

例如:

np.take(a, indices, axis=1) # shape (3,3,4,2)
[[[0.4236548  0.64589411]
  [0.60276338 0.54488318]
  [0.5488135  0.71518937]
  [0.43758721 0.891773  ]]

 [[0.07103606 0.0871293 ]
  [0.79172504 0.52889492]
  [0.96366276 0.38344152]
  [0.56804456 0.92559664]]

 [[0.0202184  0.83261985]
  [0.46147936 0.78052918]
  [0.77815675 0.87001215]
  [0.97861834 0.79915856]]]
这将对
a
进行3次采样,对
索引中的每行采样一次。

我想只采样一次
a
索引
中的每一行都有应从相应行中取样的列。

如果我理解正确,您希望:

norms = np.linalg.norm(a,axis=2) # shape(3,4)
indices = np.argsort(norms , axis=1)
np.take_along_axis(a, indices[:,:,None], axis=1)
示例的输出:

np.take(a, indices, axis=1) # shape (3,3,4,2)
[[[0.4236548  0.64589411]
  [0.60276338 0.54488318]
  [0.5488135  0.71518937]
  [0.43758721 0.891773  ]]

 [[0.07103606 0.0871293 ]
  [0.79172504 0.52889492]
  [0.96366276 0.38344152]
  [0.56804456 0.92559664]]

 [[0.0202184  0.83261985]
  [0.46147936 0.78052918]
  [0.77815675 0.87001215]
  [0.97861834 0.79915856]]]

您尝试了哪些变体,它们是如何失败的?我很乐意提名重新打开,并在您修复问题时发布答案question@MadPhysicist我用一个例子和一个说明编辑了这个问题。希望现在已经很清楚了。@NinaKaprez是发布的答案,而不是你想要的?若并没有,你们可以发布一个输入样本和期望的输出吗?那个么沿轴拍摄呢?另外,argsort不应该有axis=1吗?还是要对列而不是行进行排序?不,输出应与变量“a”具有相同的形状。@NinaKaprez它是相同的形状。
a
不是形状
(3,4,2)
?“如果不是,你就需要更好地澄清了。”埃山,我的错。我想这就是我需要的。谢谢你能详细说明索引[::None]的作用吗?@NinaKaprez。它在
None
索引处添加一个新维度<代码>无为np。欢迎使用newaxis
@NinaKaprez。不可能比疯狂物理学家的评论说得更好。