【问题标题】:Numpy array insert every second element from second arrayNumpy数组从第二个数组中插入第二个元素
【发布时间】:2020-09-01 20:40:44
【问题描述】:

我有两个形状相同的数组,现在想通过使第一个数组中的每个奇数元素和 0 以及第二个数组中的每个偶数元素以相同的顺序来组合它们。 例如:

a = ([0,1,3,5])
b = ([2,4,6])

c = ([0,1,2,3,4,5,6])

我尝试了包括模数在内的方法来识别不均匀的索引:

a = ([0,1,3,5])
b = ([2,4,6])

c = a

i = 0
j = 2
l = 0

for i in range(1,22):
    k = (i+j) % 2
    if k > 0:
        c = np.insert(c, i, b[l])
        l+=1
    else: 
        continue

我想有一些更简单/更快的切片选项,但无法弄清楚。

【问题讨论】:

    标签: python arrays numpy numpy-ndarray


    【解决方案1】:

    np.insert 会很好用:

    >>> A = np.array([1, 3, 5, 7])
    >>> B = np.array([2, 4, 6, 8])
    >>> np.insert(B, np.arange(len(A)), A)
    array([1, 2, 3, 4, 5, 6, 7, 8])
    

    但是,如果您不依赖排序值,请尝试以下操作:

    >>> A = np.array([5, 3, 1])
    >>> B = np.array([1, 2, 3])
    >>> C = [ ]
    >>> for element in zip(A, B):
            C.extend(element)
    >>> C
    [5, 1, 3, 2, 1, 3]
    

    【讨论】:

      【解决方案2】:

      阅读range的文档

      for i in range(0,10,2):
        print(i)
      

      将打印 [0,2,4,6,8]

      【讨论】:

        【解决方案3】:

        据我了解,a 中的第一个元素始终是第一个元素,其余的只是交错的。如果是这样,那么巧妙地使用堆叠和重塑可能就足够了。

        a = np.array([0,1,3,5])
        b = np.array([2,4,6])
        c = np.hstack([a[:1], np.vstack([a[1:], b]).T.reshape((-1, ))])
        

        【讨论】:

          【解决方案4】:

          你可以试试这样的

          import numpy as np
          
          A = [0,1,3,5]
          B = [2,4,6]
          lst = np.zeros(len(A)+len(B))
          
          lst[0]=A[0]
          lst[1::2] = A[1:]
          lst[2::2] = B
          

          虽然我不明白你为什么要把它弄得这么复杂

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-01-22
            • 2022-11-16
            • 2018-06-12
            • 1970-01-01
            • 2015-01-08
            • 2021-01-01
            • 2020-12-22
            • 1970-01-01
            相关资源
            最近更新 更多