在中排序元素np.数组使用约束

2024-06-11 07:40:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我想整理np.数组按一定的顺序,输入数组a:

a = np.array([[ 2,  2,  1,],
              [ 3,  3,  3,],
              [ 2,  3,  2,]])

我想得到输出:

^{pr2}$

正如您可能猜到的,这种排序的思想是在数组中创建一个对称(以及其他一些与此无关的内容)。在

我的问题是,为了对数组进行排序,我只进行随机洗牌:

^{3}$

其中,symmetry函数为真,如果元素的排列与条件匹配。在

因此,我正在寻找更有效的方法来排序数组,以便通过我的求值函数。在

我应该把机器学习技术应用到我的问题上吗?在

另外,我正在寻找任何建议,评论,想法或想法。。。在


Tags: 方法函数机器元素内容排序顺序np
1条回答
网友
1楼 · 发布于 2024-06-11 07:40:48

注意,你有对称性,因为你的元素允许它(正确的数字3,2和1,对称性是可能的)。假设你考虑到这一点,你要找的是放射状的。下面的算法可以做到这一点:

import numpy as np

def sortRadially(a):
    X, Y = np.indices(a.shape, dtype="float")
    c = int(a.shape[0]/2)
    d = np.sqrt((c-X)**2 + (c-Y)**2)
    fd = d.flatten()
    fX = X.flatten()
    fY = Y.flatten()
    argD = fd.argsort()
    nX = fX[argD].astype(int)
    nY = fY[argD].astype(int)
    fa = a.flatten()
    sa = a.copy()
    fa.sort()
    for i in range(nX.shape[0]):
        a[nX[i], nY[i]] = fa[i]
    return a

a = np.array([[ 2,  2,  1,],
              [ 3,  3,  3,],
              [ 2,  3,  2,]])

myown = np.random.randint(0, 100, (9, 9))

print("Your test:")
print(sortRadially(a))
print("")
print("My test:")
print(sortRadially(myown))

结果是:

^{pr2}$

我不是排序算法方面的专家,也许有更快的方法可以做到这一点,但它肯定比洗牌和等待最佳结果更快。在

对算法的解释如下:

  1. 得到所有单元格的坐标(X,Y)。

  2. 计算从所有坐标到中心单元格的距离 (在我的算法中,我假设矩阵是大小奇数的正方形 行/列)。

  3. 对距离进行排序并获得索引(而不是距离 价值观)。

  4. 对X和Y坐标应用相同的排序。

  5. 对原始数组进行排序。

  6. 在排序的单元格和坐标之后填充数组。在
  7. 真的没有第7步),我只是不喜欢6点离开。。。在

相关问题 更多 >