我正在尝试使用this post中的方法调整我创建的数组的顺序。
基本上取决于数组的行索引(其中axis = 0),该索引的子元素已被删除(例如,如果查看索引1,则仅存在元素0和2)。
我需要一种方法将每个元素放回到与其原始索引相对应的行中。
>>> a = array([[[222],[333]],
[[111],[333]],
[[111],[222]]])
期望的输出:
>>> a = array([[[111],[111]],
[[222],[222]],
[[333],[333]]])
在我的尝试中,我认为这可能会越来越近了:
>>> n = a.shape[0]
>>> row_idx = np.nonzero(~np.eye(n,dtype=bool))[1].reshape(n,n-1) # dim0 indices
>>> print a.ravel() #flatten the array
[222, 333, 111, 333, 111, 222]
>>> print row_idx #somehow use these indices to reposition corresponding elements
[1 2 0 2 0 1]
我不确定如何使用row_idx将元素对齐到相应的行中,或者这是否是一种有效的方法呢?
谢谢!
答案 0 :(得分:2)
使用展平的<?php
namespace MyDomain\Model;
class Employee {
}
?>
来获取 reverse-argsort ,然后使用它直接索引到展平的row_idx
,最后重塑 -
a
分步运行 -
1)扁平化数组和索引:
a.ravel()[row_idx.ravel().argsort()].reshape(a.shape)
2)我们需要找到扁平In [72]: a.ravel()
Out[72]: array([222, 333, 111, 333, 111, 222])
In [73]: row_idx.ravel()
Out[73]: array([1, 2, 0, 2, 0, 1])
的置换版本,让我们称之为a
,以便a0
,a0[1] = 222
等等。要查找那些置换索引,我们需要在展平a0[2] = 333
上使用argsort
。因此,使用这些作为最终输出的row_idx
索引。为了以多维格式返回输出,我们需要最终重塑:
a