numpy的二维数组组合

谢尔盖·罗宁(Sergey Ronin)

假设我有两个数组:

a = np.array(
[[0, 1],
 [2, 3],
 [4, 5],
 [6, 7]])

b = np.array(
[[2, 3],
 [6, 7],
 [0, 1],
 [4, 5]])

如您所见,一个数组只是另一数组的混洗我需要结合这两个数组来形成第三个数组c,例如:

  • 阵列的所述第一部分c(直到随机索引i)由从阵列的所述第一部分元件a(直到索引i)。因此,c[:i] == a[:i]必须返回True。
  • 数组的其余部分c由来自array的值填充,这些值b尚未出现在array中c,其顺序完全相同。

鉴于索引i设置为2,对于上述阵列所需的输出ab在所述代码应为:

> c
[[0, 1],
 [2, 3],
 [6, 7],
 [4, 5]]

数组c的长度必须与arrayb和array的长度相同a,并且arraya或arrayb中的两个元素可能相同。阵列c还必须由那些在相同的元件的ab,(即,它有些行为类似于洗牌)。

我尝试了多种解决方案,但没有一个能提供理想的结果。最接近的是:

a = np.arange(10).reshape(5, 2)
np.random.shuffle(a)

b = np.arange(10).reshape(5, 2)
b_part = b[:4]

temp = []

for part in a:
    if part in b_part:
        continue
    else:
        temp.append(part)

temp = np.array(temp)

c = copy.deepcopy(np.vstack((b_part, temp)))

但是,有时这会导致arrayc小于arrayab,因为任一列表中的元素有时可能会重复。

保罗·潘泽

以下应正确处理重复项。

def mix(a, b, i):                                             
    sa, sb = map(np.lexsort, (a.T, b.T))                      
    mb = np.empty(len(a), '?')                                
    mb[sb] = np.arange(2, dtype='?').repeat((i, len(a)-i))[sa]
    return np.concatenate([a[:i], b[mb]], 0)                             

  • 间接排序ab
  • 在未取走的位置创建一个为True的蒙版a,即具有iFalse和True的蒙版len(a)-i
  • 使用排序顺序将该蒙版映射到 b
  • b用蒙版过滤并附加到a[:i]

示例(为了节省空间):

a.T
# array([[2, 2, 0, 2, 3, 0, 2, 0, 0, 1],
#        [0, 1, 2, 0, 1, 0, 3, 0, 0, 0]])
b.T
# array([[0, 0, 2, 1, 0, 0, 2, 2, 2, 3],
#        [0, 0, 0, 0, 2, 0, 1, 3, 0, 1]])
mix(a, b, 6).T
# array([[2, 2, 0, 2, 3, 0, 0, 1, 0, 2],
#        [0, 1, 2, 0, 1, 0, 0, 0, 0, 3]])

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带元组的二维numpy数组:扩展为带有原始元组组合的多个数组

来自分类Dev

如何将一维数组与二维数组组合

来自分类Dev

将二维数组与php中的另一个单维数组组合

来自分类Dev

由二维数组组成的二维数组

来自分类Dev

在numpy中组合二维矩阵

来自分类Dev

在numpy中组合二维矩阵

来自分类Dev

numpy的二维数组最大/最大

来自分类Dev

如何更新二维numpy数组?

来自分类Dev

如何生成二维numpy数组?

来自分类Dev

二维numpy数组中的阈值

来自分类Dev

二维数组的numpy列表乘法

来自分类Dev

numpy:二维数组矩阵的大小?

来自分类Dev

二维数组的Numpy Delete

来自分类Dev

底图和numpy二维数组

来自分类Dev

访问二维numpy数组

来自分类Dev

numpy在哪里二维数组

来自分类Dev

Numpy迭代二维对象数组

来自分类Dev

二维数组的 Numpy 梯度

来自分类Dev

无法修改 numpy 二维数组

来自分类Dev

将二维numpy数组放入3维数组

来自分类Dev

沿堆叠二维numpy数组的第三维确定所有唯一组合

来自分类Dev

二维Numpy数组到Numpy数组列表

来自分类Dev

将二维数组合并为组

来自分类Dev

将二维数组合并为组

来自分类Dev

PHP - 寻找一种方法来比较二维数组中的值,然后将具有相同值的数组组合成一个三维数组

来自分类Dev

Python n 维数组组合

来自分类Dev

如何从numpy二维数组中提取子数组?

来自分类Dev

通过索引二维数组来填充numpy数组

来自分类Dev

基于索引的二维numpy数组排列numpy二维数组的numpy方法是什么?