我有一个形状为(6023,6023)的numpy数组。实际上,它是几个“子数组”的组合,这意味着我可以将一个名称赋给数组每边的几个部分,子数组显示这些“名称”之间的交互作用。两边的名字都是相同的(数据在主对角线周围是相似的)。 这就是数组的实际组成部分。这些是我称之为子阵的部分的边界坐标及其各自的名称:
boundaris = [(0, 68), (68, 1190), (1190, 2248), (2248, 3399), (3399, 4795), (4795, 6023)]
names = ('4', 'X', '2R', '2L', '3R', '3L')
因此,在这个角落里有一个正方形的数据,它的交互作用是‘4’和‘4’。它接近'4'-'X'、'X'-'4'和'X'-'X'。等等。如果这一切都不清楚,我可以做一个图片,可能会澄清我的意思。在
所以问题是:我如何重新排列子数组,使名称以不同的顺序排列?我希望它们按以下顺序排列: (“2L”、“2R”、“3L”、“3R”、“4”、“X”)
更新1
在我发布图片之前,我会尝试用不同的方式解释。这种情况基本上是等价的:我有6*6=36个数组,它们对应于交互:“2L”—“2L”,“2L”-“2R”,“2L”-“3L”,…,“X”-“X”。我如何用所有这些数组组成一个数组,使它们在逻辑上是一致的,并且在最后一个数组的每一边按名称的顺序('2L'、'2R'、'3L'、'3R'、'4'、'X')?在
更新2
我已经为我需要的东西制定了一个计划,希望它能解决问题。在
这是我在一开始所拥有的:
大正方形内的小矩形代表“子阵列”。每一个都包含许多“单元格”,例如,“4”-“4”(最小的一个)包含68^2=4624个单元格。整个数组包含6023^2=36276529“单元格”。在
然后我想重新排列子数组,以便名称按不同的顺序排列:
这就是它在转型后的样子。我碰巧知道名字边界的最终坐标,但它们并不难计算。希望你能看到我想要做的:重新排列一个大数组的部分(本质上是更小的数组),这样它们就形成了一个数组,在它的轴上有不同的“名称”位置。在
这将重新排列输入数组的名称和块-块重新排列的关键是
numpy.ix_
函数,它允许类似Matlab的索引。在相关问题 更多 >
编程相关推荐