为了账号安全,请及时绑定邮箱和手机立即绑定

如何从 n 维集合轻松创建 n-1 维集合?

如何从 n 维集合轻松创建 n-1 维集合?

慕哥9229398 2021-08-17 10:53:35
我使用 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]]等等到目前为止,我一直使用 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])等等问题出现在具有更多维度的集合中 - 那么它们无法手动创建。我想在这样的循环中做到这一点:dim = 4flag = Truefor 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 维集合?
查看完整描述

2 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

您可以使用布尔索引

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

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


查看完整回答
反对 回复 2021-08-17
?
UYOU

TA贡献1878条经验 获得超4个赞

itertools.combinations 是生成列索引组合的简便方法:


In [182]: itertools.combinations(range(4),3)

Out[182]: <itertools.combinations at 0x7f7dc41cb5e8>

In [183]: list(_)

Out[183]: [(0, 1, 2), (0, 1, 3), (0, 2, 3), (1, 2, 3)]

使用它来生成子数组D:


In [184]: D = np.arange(12).reshape(3,4)

In [185]: alist = []

In [186]: for tup in itertools.combinations(range(4),3):

     ...:     alist.append(D[:, tup])

     ...:     

In [187]: alist

Out[187]: 

[array([[ 0,  1,  2],

        [ 4,  5,  6],

        [ 8,  9, 10]]), 

 array([[ 0,  1,  3],

        [ 4,  5,  7],

        [ 8,  9, 11]]), 

 array([[ 0,  2,  3],

        [ 4,  6,  7],

        [ 8, 10, 11]]), 

 array([[ 1,  2,  3],

        [ 5,  6,  7],

        [ 9, 10, 11]])]

我不太确定你想用hstack. 将这些子数组组合成一个宽的可能不是您想要的:


In [188]: np.hstack(alist)

Out[188]: 

array([[ 0,  1,  2,  0,  1,  3,  0,  2,  3,  1,  2,  3],

       [ 4,  5,  6,  4,  5,  7,  4,  6,  7,  5,  6,  7],

       [ 8,  9, 10,  8,  9, 11,  8, 10, 11,  9, 10, 11]])


查看完整回答
反对 回复 2021-08-17
  • 2 回答
  • 0 关注
  • 187 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信