首页 > 解决方案 > 如何从 n 维集合轻松创建 n-1 维集合?

问题描述

我使用 numpy 数组格式的数据,例如:

[[5.1 3.5 1.4 0.2]
[4.9 3. 1.4 0.2]
[4.7 3.2 1.3 0.2]
[4.6 3.1 1.5 0.2]
......
[5.9 3. 5.1 1.8]]

我需要 n 个 n-1 维数组(其中 n 是维数),在这种情况下是四个 3 维数据集。

第一个集合:

[[3.5 1.4 0.2]
[3. 1.4 0.2]
[3.2 1.3 0.2]
[3.1 1.5 0.2]
......
[3. 5.1 1.8]]

第二集:

[[5.1 1.4 0.2]
[4.9 1.4 0.2]
[4.7 1.3 0.2]
[4.6 1.5 0.2]
......
[5.9 5.1 1.8]]

ETC

到现在为止,我一直使用numpy.hstack()函数,它需要元组形式的参数。我是这样做的:

a = []
for i in range (0.3):
   a.append (tuple (map (tuple, D [:, i: i + 1])))

第一个集合:

numpy.hstack ([a[1], a[2], a[3])

第二套:

numpy.hstack ([a[0], a[2], a[3])

ETC

问题出现在具有更多维度的集合中 - 然后它们不能手动创建。我想在这样的循环中做到这一点:

dim = 4
flag = True
for k in range (0, dim-1):
b = []
for l in range (0, dim-1):
   if l! = k:
      if flag:
         b = a[l]
         flag = False
      else:
         b = numpy.hstack ([b, a[l]])

不幸的是,hstack() 函数需要具有相同维数的文件,所以我不能将 2d 集与 1d 等结合起来。有谁知道如何从 n 维集轻松创建 n-1 维集合?

标签: pythonnumpy

解决方案


您可以使用布尔索引

 mask=~np.eye(dim,dtype=bool)

现在 D[:,mask[i]] 是你的第 i 个收藏。


推荐阅读