【发布时间】:2017-08-23 13:29:46
【问题描述】:
我有一个 numpy 数组
b = np.array([[1,2], [3,4], [1,6], [7,2], [3,9], [7,10]])
现在,我想做以下事情:我想减少 b。我想减少它的方法是查看 b 的第一个元素,即 [1,2] 并基于此,我删除 b 中至少包含 1 或 2 的所有元素。在这种情况下,我将消除[1,6] 和[7,2]。然后我会查看[3,4] 并消除那些至少包含3 或4 的元素。
实际上,我从列表的开头开始,对于每个元素,我删除包含其中一个元素的其他元素。
我的尝试
for a in b:
np.insert(b[~np.array([np.any((a==b)[j]) for j in range(len(b))])], 0,a, axis = 0)
遗憾的是,这不起作用!
这是我尝试过的,但它不起作用而且太长了。还有其他想法吗?
编辑
我认为主要问题是,当我执行np.any((a==b)[j]) 时,它只对那些第一个元素等于 a 的第一个元素的元素说 True,但当它们等于第二个元素时不说 True
编辑 2 你认为这会奏效吗?
for index, a in enumerate(b):
np.insert(b[~np.array([np.any(np.logical_or(a[0]==b, a[1]==b)[j]) for j in range(len(b))])], index, a, axis = 0)
【问题讨论】:
-
嗯是的,但是删除它们的顺序很重要!想象一下,行的索引是某种排名。您希望只保留那些具有唯一数字的子数组,以便您拥有最高(即最低)排名
-
最后结果应该是
b = np.array([[1,2], [3,4], [7,10]])。如您所见,[1,2]在[1,6]和[7,2]上幸存下来,[3,4]在[3,9]上幸存下来,但是[7,2]在[7,10]上幸存下来,因为[7,2]被[1,2]淘汰了 -
实际数据集的数组形状是什么?
-
我还没有,但基本上这个列表将是以下结果:给定一个数字(比如 60k),我想创建它之前的所有数字组合(即 [ 0,0]、[1,1]、[1,59k] 等)
-
那我想做其他的事情,但这就是大数字的由来