簡體   English   中英

如何按順序將兩個矩陣中的值相互分配?

[英]How to assign values from two matrices to each other in sequence?

根據示例,我嘗試將第二個矩陣中的值分配給第一個潤滑器中的值。 首先,我通過矩陣 b 中的最后一行 go 並逐漸將矩陣 d 中的值分配給它。 然后我在矩陣 b 中向上移動一行,在矩陣 d 中移動下一個 position 並且我也依次分配。 所以我繼續到矩陣的末尾

例子

導入 numpy 作為 np

b=np.array([13,14,15,16,17],
           [22,23,24,25,26],
           [31,32,33,34,35])

d=np.array[100,200,300,400,500,600,700]

需要 output

31 100
32 200
33 300
34 400
35 500
22 200
23 300
24 400
25 500
26 600
13 300
14 400 
15 500 
16 600
17 700

誰能幫我這個?

**注意:我在語法上做了一些小修正。
-(負)索引將很有用。 您需要在 b 上迭代 -1,-2... 行。 -1 = 最后一行。 並使用行 id 在 d 中獲取偏移量。

import numpy as np
b=np.array([[13,14,15,16,17],
           [22,23,24,25,26],
           [31,32,33,34,35]])

d=np.array([100,200,300,400,500,600,700])

for i in range(1, 1+len(b)):
    for j in range(len(b[-i])):
        print(b[-i][j], d[i+j-1])

為此,您可以重新排列b的行並將它們按順序水平堆疊。
然后通過將元素從 i 到 i + len(row(b)) 從數組d中創建一個矩陣,其中 i 從 0 開始並在每個 epoch 后移位,然后按順序水平堆疊行。
最后可以zip這兩個arrays得到想要的結果

b=np.array([[13,14,15,16,17],
           [22,23,24,25,26],
           [31,32,33,34,35]])

d=np.array([100,200,300,400,500,600,700])

val1 = np.hstack(b[::-1])
val2 = np.hstack([d[i:i+b.shape[1]] for i in range(b.shape[0])])
res = zip(val1, val2)
for i, j in res:
    print(i, j)

output:

31 100
32 200
33 300
34 400
35 500
22 200
23 300
24 400
25 500
26 600
13 300
14 400
15 500
16 600
17 700

如果您從d數組中的索引a數組預測,您可以嘗試以下操作:

>>> order = b[::-1]
>>> idx = (order % 10) - 1
>>> np.stack([order.ravel(), d[idx].ravel()]).T

array([[ 31, 100],
       [ 32, 200],
       [ 33, 300],
       [ 34, 400],
       [ 35, 500],
       [ 22, 200],
       [ 23, 300],
       [ 24, 400],
       [ 25, 500],
       [ 26, 600],
       [ 13, 300],
       [ 14, 400],
       [ 15, 500],
       [ 16, 600],
       [ 17, 700]])

您可以將d視為對應於翻轉b的矩陣:

v = np.lib.stride_tricks.as_strided(d, shape=b.shape, strides=d.strides * 2)

現在您可以將兩者堆疊在一起:

result = np.ravel((b[::-1].ravel(), v.ravel()), axis=-1)

暫無
暫無

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

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