我有两个numpy数组,我可以通过添加这两个数组来获得所有组合,其中两个行都没有剩余零,但是这样做时,我松开了数组的原始组成部分,但不确定如何检索那条信息。请在下面查看我的代码:
x = np.array([[1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],
[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0],
[0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],
[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]])
y= np.array([[1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],
[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]])
x = np.expand_dims(x, 1)
combos = (x + y).reshape(-1, 12).astype("int")
mask = np.any(np.equal(combos, 0), axis=1)
combos=combos[~mask]
print("combos:",combos)
# Prints
combos: [[1 1 1 2 2 2 2 2 1 1 1 1]
[1 1 1 1 2 2 2 2 2 1 1 1]
[1 1 1 2 2 2 2 2 2 1 1 1]
[1 1 1 2 2 2 2 2 2 1 1 1]]
现在从以上结果中,我需要知道创建组合的x和y的行值是什么,例如对于第一行:
组合[0] = [1,1,1,2,2,2,2,2,1,1,1,1]
X = [1,1,1,1,1,1,1,1,0,0,0,0]
Y = [0,0,0,1,1,1,1,1,1,1,1,1,1]
答案 0 :(得分:0)
尽管您可以尝试从总和中重建组合,但在组合时记下组合绝对会更好。代替
x = np.expand_dims(x, 1)
combos = (x + y).reshape(-1, 12).astype("int")
mask = np.any(np.equal(combos, 0), axis=1)
combos=combos[~mask]
print("combos:",combos)
您可以尝试这样的事情:
combos=dict()
for e in x:
for f in y:
combo=e+f
tp=tuple(combo)
if 0 in tp:
continue
if tp not in combos:
combos[tp]=set()
combos[tp].add((tuple(e),tuple(f)))
for e in combos:
print(e)
for f in combos[e]:
print("->{}{}".format(f[0],f[1]))
(生成的字典将总和作为键,将组合集作为值,所有值都以元组形式显示。当然,您也可以存储x和y的索引以节省空间,我强烈建议这样做。) / p>
答案 1 :(得分:0)
如果(x+y)
未展平,可能会有所帮助。然后,掩码显示True,x和y索引会生成非零行。
import numpy as np
x = np.array([[1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],
[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0],
[0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],
[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]])
y= np.array([[1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],
[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]])
x = np.expand_dims(x, 1)
temp = x + y
生成x,y索引完全不为零的掩码。
mask = ~np.any(temp == 0, axis=2)
mask
Out[8]:
array([[False, False, False, True],
[False, False, False, False],
[False, False, False, False],
[False, False, False, False],
[ True, False, False, False],
[False, False, False, True],
[False, False, False, False],
[False, False, False, False],
[ True, False, False, False]])
x_ix = np.indices((x.shape[0], y.shape[0]))[0, mask]
x_ix
Out[12]: array([0, 4, 5, 8])
y_ix = np.indices((x.shape[0], y.shape[0]))[1, mask]
y_ix
Out[13]: array([3, 0, 3, 0])
x_ix和y_ix数组标识产生所需结果的索引组合。
这可能无法完全满足您的需求,但可能会指出解决方案。