我有以下陣列串列。現在我想保留每個陣列的第一個元素,然后將每個陣列中的每個第一個元素與同一陣列(同一行)中的所有其他數字相乘。
陣列:
[array([0.9870343 , 0.52241888, 0.36668887, 0.56469955]),
array([1.06875891, 0.47363532, 0.34032307, 0.54298871]),
array([1.07251434, 0.48067476, 0.38125151, 0.53832131]),
array([3.00953588, 0.8133002 , 1.44178431, 0.48336691])]
因此,例如對于第一個陣列(第一行),我想要 4 個數字:第一個應該保持原樣,第二個數字應該乘以第一個:0.9870343*0.52241888=0.51564535。第三個和第四個數字也應該乘以第一個:0.9870343*0.36668887=0.36193449和0.9870343*0.56469955=0.5573778250。
相同格式的預期輸出,但相乘:
[array([0.9870343 , 0.51564535, 0.36193449, 0.55737782]),
array([1.06875891, 0.50620196, 0.36372331, 0.58032402]),
array([1.07251434, 0.51553057, 0.40889771, 0.57735732]),
array([3.00953588, 2.44765613, 4.3391016, 1.45471005])]
之后,我想獲取每個陣列(行)的最大值,并將一個陣列中的所有值除以最大值。所以在第一個:array([0.9870343 , 0.51564535, 0.36193449, 0.55737782]最大值是0.9870343,所以我想將這個陣列中的所有數字除以0.9870343。然后對于下一行相同的步驟。最高的數字是1.06875891。所以我想將該行中的所有值除以1.06875891. 等等。
第 2 步的預期輸出:
[array([1 , 0.52241887, 0.36668886, 0.56469954]),
array([1, 0.4736353, 0.3403230, 0.54298870]),
array([1, 0.48067475, 0.38125150, 0.53832130]),
array([0.69358502, 0.56409283, 1, 0.33525604])]
我知道如何訪問每個元素并將其乘以或除以其他元素,但我不知道如何在 numpy 陣列上運行回圈。我的代碼:
A = myarray[0][0]
B = myarray[0][1]
C = myarray[0][2]
D = myarray[0][3]
A=a
multiplyAB=A*B
multiplyAC=A*C
multiplyAD=A*D
print(A,multiplyAB,multiplyAC,multiplyAD)
norm=max(A,multiplyAB,multiplyAC,multiplyAD)
A=A/norm
multiplyAB=multiplyAB/norm
multiplyAC=multiplyAC/norm
multiplyAD=multiplyAD/norm
print(A,multiplyAB,multiplyAC,multiplyAD)
uj5u.com熱心網友回復:
您可以myarray轉換為 numpy 陣列并使用 numpy 廣播乘以列向量并除以列向量(編輯為使用更直觀的方法來保持@MadPhysicist 建議的第二維):
myarray = np.array(myarray)
myarray[:, 1:] *= myarray[:, [0]]
myarray /= myarray.max(axis=1, keepdims=True)
print(myarray)
輸出:
array([[1. , 0.52241888, 0.36668887, 0.56469955],
[1. , 0.47363532, 0.34032307, 0.54298871],
[1. , 0.48067476, 0.38125151, 0.53832131],
[0.69358502, 0.56409284, 1. , 0.33525605]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/448650.html
下一篇:為numpy陣列的子集賦值
