我使用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维数组(其中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]]
e.t.c。
直到现在,我都使用了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])
e.t.c。
问题出现在具有更大尺寸的集合中,因此无法手动创建它们。 我想像这样循环执行:
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维集合?
答案 0 :(得分:0)
答案 1 :(得分:0)
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]])