簡體   English   中英

合並兩個numpy.array而不循環

[英]merge two numpy.array without a loop

我有兩個numpy.arrays,我想有效地獲得以下結果

1.將b的元素添加到a的子數組中

    a=numpy.array([(1,2,3),(1,2,3)])
    b=numpy.array([0,0])
->
    c=[(0,1,2,3),(0,1,2,3)] 

循環編碼

a=numpy.array([(1,2,3),(1,2,3)])
b=numpy.array([(0,0)])
c=numpy.zeros(2 , 4)
idx=0
for x in a:
   c[idx]=(a[idx][0],a[idx][1],a[idx][2], b[idx])
   idx = idx+1


2.從兩個一維數組中獲取一個維度為(a.dim * b.dim,2)的二維數組

    a=numpy.array([(1,2)])
    b=numpy.array([(3,4)])
->
    c=[(1,3),(1,4),(2,3),(2,4)]

循環編碼

a=numpy.array([(1,2)])
b=numpy.array([(3,4)])
c=numpy.zeros(a.size*b.size , 2)
idx=0
for x in a:
    for y in b:
        c[idx]=(x,y)
        idx = idx+1

對於第一個問題,您可以不同地定義b並使用numpy.hstack

a = numpy.array([(1,2,3),(1,2,3)])
b = numpy.array([[0],[0]])
numpy.hstack((b,a))

關於第二個問題,如有必要,我可能會使用sza的答案並根據該結果創建numpy數組。 該技術在一個古老的Stack Overflow問題中提出

對於第一個,你可以做

>>> a=numpy.array([(1,2,3),(1,2,3)])
>>> b=numpy.array([0,0])
>>> [tuple(numpy.insert(x, 0, y)) for (x,y) in zip(a,b)]
[(0, 1, 2, 3), (0, 1, 2, 3)]

對於第二個,您可以像這樣獲得二維數組

>>> a=numpy.array([(1,2)])
>>> b=numpy.array([(3,4)])
>>> import itertools
>>> c = list(itertools.product(a.tolist()[0], b.tolist()[0]))
[(1, 3), (1, 4), (2, 3), (2, 4)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM