目的是在沒有 for 回圈或 while 回圈的情況下進行,如果可能,使用更快的回圈:
def multiply(x):
return x * 10
a = np.random.randint(1, 10, size=(5, 5))
print(f"array a = {a}")
a_multiplied = list(map(multiply, a))
print(f"multiply of a = {a_multiplied}")
它是這樣開始的:
array a = [
[4 6 1 5 9]
[7 9 4 5 9]
[8 9 6 5 6]
[8 6 4 4 3]
[2 4 2 9 4]
]
并回傳:
multiplied of a = [array([40, 60, 10, 50, 90]), array([70, 90, 40, 50, 90]), array([80, 90, 60, 50, 60]), array([80, 60, 40, 40, 30]), array([20, 40, 20, 90, 40])]
如何使用前一行和同一列替換multiply函式中的 10 ?
例子:
from this:
array a = [
[4 6 1 5 9]
[7 9 4 5 9]
[8 9 6 5 6]
[8 6 4 4 3]
[2 4 2 9 4]
]
the process:
array a = [
[4 6 |1| 5 9]
[7 9 |4| 5 9] Multiply 4 * 1(previus row and same index)
[8 9 |6| 5 6] Multiply 6 * 4(previus row and same index)
[8 6 |4| 4 3] Multiply 4 * 6(previus row and same index)
[2 4 |2| 9 4] Multiply 2 * 4(previus row and same index)
]
to this:
array a = [
[4 6 |1 | 5 9]
[7 9 |4 | 5 9]
[8 9 |24| 5 6]
[8 6 |24| 4 3]
[2 4 |8 | 9 4]
]
uj5u.com熱心網友回復:
正如 S3DEV 指出的那樣,您可以對 numpy 陣列進行 切片。例如,讓我們以您的陣列為例
a = np.array([[4, 6, 1, 5, 9],
[7, 9, 4, 5, 9],
[8, 9, 6, 5, 6],
[8, 6, 4, 4, 3],
[2, 4, 2, 9, 4]])
我們可以用除了最后一行之外的a[:-1,:]所有東西,除了第一行之外的所有東西,a[1:,:]這樣你就可以用 來做乘法b = a[:-1,:] * a[1:,:],給
[[28 54 4 25 81]
[56 81 24 25 54]
[64 54 24 20 18]
[16 24 8 36 12]]
如果您只想要一列,那么就像您在示例中顯示的那樣,您可以進一步切片:b = a[:-1,2] * a[1:,2]給出[ 4 24 24 8],或如示例中所述[1 * 4, 4 * 6, 6 * 4, 4 * 2]。
編輯:(和帽尖Ali_Sh用于察覺),可以直接把這樣的事到現有的numpy.array,你在你的問題表明,你可能只是像做a[1:,2] *= a[:-1,2]給a為:
[[ 4 6 1 5 9]
[ 7 9 4 5 9]
[ 8 9 24 5 6]
[ 8 6 24 4 3]
[ 2 4 8 9 4]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/368003.html
上一篇:歸一化公式-使用整個/火車資料集計算公式內的平均值和STD?
下一篇:使用布爾矩陣從資料幀中提取向量
