亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何有效地在二維上合并兩個 3d 數組?

如何有效地在二維上合并兩個 3d 數組?

慕后森 2023-06-27 17:23:23
假設我有兩個形狀為 (1.000.000, ???, 50) 的 3 維數組 (a & b),(??? = 見下文)。如何合并它們,使結果為 (1.000.000, {a 的形狀 + b 的第二個維度} , 50)?以下是示例,如下所示:(np.arrays 也是可能的)編輯:添加了可用代碼,請滾動^^[ #a     [                            ],     [        [1  2  3]                 ],     [        [0  2    7]       [1  Nan  3]                 ],     [        [10   0  3]       [NaN  9  9]       [10 NaN  3]                 ],     [        [8  2  0]       [2  2  3]       [8  1  3]       [1  2  3]                 ],     [        [0  2  3]       [1  2  9]       [1  2  3]       [1  0  3]       [1  2  3]                 ]                     ] [#b     [        [7  2  3]       [1  2  9]       [1  2  3]       [8  0  3]       [1  7  3]                 ]     [        [3  9  0]       [2  2  3]       [8  1  3]       [0  2  3]                 ],     [        [10   0  3]       [0  NaN  9]       [10 NaN  3]                 ],     [        [0  2  NaN]       [1  Nan  3]                 ],     [        [1  2  NaN]                 ],     [                            ]                     ] a = [    [                ],     [ [1, 2, 3]          ],     [ [0, 2, 7],  [1,np.nan,3]   ],     [        [10,0,3],  [np.nan,9,9],  [10,np.nan,3]                 ],     [        [8,2,0],  [2,2,3],  [8,1,3],  [1,2,3]                 ],     [         [0,2,3],  [1,2,9],  [1,2,3],  [1,0,3],     [1,2,3]                     ]                     ]  b = [     [        [7,2,3],     [1,2,9],   [1,2,3],  [8,0,3],   [1,7,3]                   ],     [        [3,9,0],   [2,2,3],   [8,1,3],   [0,2,3]                   ],     [        [10,0,3],  [0,np.nan,9],   [10,np.nan,3]                   ],     [        [0,2,np.nan],  [1,np.nan,3]                   ],     [        [1,2,np.nan]                   ],     [                              ]                     ]您知道一種有效的方法嗎?
查看完整描述

2 回答

?
哈士奇WWW

TA貢獻1799條經驗 獲得超6個贊

您不能擁有一個維度長度可變的數組。a和b很可能是列表的列表,而不是數組。您可以將列表理解與 zip 一起使用:


np.array([x+y for x,y in zip(a,b)]) 

編輯:或根據提供的注釋,如果a和b是數組列表:


np.array([np.vstack((x,y)) for x,y in zip(a,b)])

您的示例的輸出如下所示:


[[[ 7.  2.  3.]

  [ 1.  2.  9.]

  [ 1.  2.  3.]

  [ 8.  0.  3.]

  [ 1.  7.  3.]]


 [[ 1.  2.  3.]

  [ 3.  9.  0.]

  [ 2.  2.  3.]

  [ 8.  1.  3.]

  [ 0.  2.  3.]]


 [[ 0.  2.  7.]

  [ 1. nan  3.]

  [10.  0.  3.]

  [ 0. nan  9.]

  [10. nan  3.]]


 [[10.  0.  3.]

  [nan  9.  9.]

  [10. nan  3.]

  [ 0.  2. nan]

  [ 1. nan  3.]]


 [[ 8.  2.  0.]

  [ 2.  2.  3.]

  [ 8.  1.  3.]

  [ 1.  2.  3.]

  [ 1.  2. nan]]


 [[ 0.  2.  3.]

  [ 1.  2.  9.]

  [ 1.  2.  3.]

  [ 1.  0.  3.]

  [ 1.  2.  3.]]]


查看完整回答
反對 回復 2023-06-27
?
MYYA

TA貢獻1868條經驗 獲得超4個贊

要執行串聯,請運行:


result = np.concatenate([a, b], axis=1)

為了測試這段代碼,我創建了a和b:


a = np.stack([ np.full((2, 3), i) for i in range(1, 6)], axis=1)

b = np.stack([ np.full((2, 3), i + 10) for i in range(1, 4)], axis=1)

所以它們包含:


array([[[1, 1, 1],? ? ? ? array([[[11, 11, 11],

? ? ? ? [2, 2, 2],? ? ? ? ? ? ? ? [12, 12, 12],

? ? ? ? [3, 3, 3],? ? ? ? ? ? ? ? [13, 13, 13]],

? ? ? ? [4, 4, 4],? ? ? ??

? ? ? ? [5, 5, 5]],? ? ? ? ? ? ? [[11, 11, 11],

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [12, 12, 12],

? ? ? ?[[1, 1, 1],? ? ? ? ? ? ? ? [13, 13, 13]]])

? ? ? ? [2, 2, 2],

? ? ? ? [3, 3, 3],

? ? ? ? [4, 4, 4],

? ? ? ? [5, 5, 5]]])

它們的形狀是:(2, 5, 3)和(2, 3, 3)


我的串聯結果是:


array([[[ 1,? 1,? 1],

? ? ? ? [ 2,? 2,? 2],

? ? ? ? [ 3,? 3,? 3],

? ? ? ? [ 4,? 4,? 4],

? ? ? ? [ 5,? 5,? 5],

? ? ? ? [11, 11, 11],

? ? ? ? [12, 12, 12],

? ? ? ? [13, 13, 13]],


? ? ? ?[[ 1,? 1,? 1],

? ? ? ? [ 2,? 2,? 2],

? ? ? ? [ 3,? 3,? 3],

? ? ? ? [ 4,? 4,? 4],

? ? ? ? [ 5,? 5,? 5],

? ? ? ? [11, 11, 11],

? ? ? ? [12, 12, 12],

? ? ? ? [13, 13, 13]]])

形狀是(2, 8, 3),正如它應該的那樣。


我嘗試了您評論中的代碼。執行后a = list((map(lambda i: a[:i], range(1,a.shape[0]+1)))),結果是:


[array([[1, 1]], dtype=int64),

?array([[1, 1],

? ? ? ? [1, 1]], dtype=int64),

?array([[1, 1],

? ? ? ? [1, 1],

? ? ? ? [1, 1]], dtype=int64),

?array([[1, 1],

? ? ? ? [1, 1],

? ? ? ? [1, 1],

? ? ? ? [1, 1]], dtype=int64),

?array([[1, 1],

? ? ? ? [1, 1],

? ? ? ? [1, 1],

? ? ? ? [1, 1],

? ? ? ? [1, 1]], dtype=int64),

...

所以a是不同大小的數組的列表。


您構建數據的方式有問題。首先檢查您的兩個數組是否都是3-D的,并且它們的形狀僅在軸 1 上有所不同。只有這樣您才能在它們上運行我的代碼。現在a和b都是普通的pythonic 列表,而不是Numpy數組!


查看完整回答
反對 回復 2023-06-27
  • 2 回答
  • 0 關注
  • 181 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號