簡體   English   中英

更改numpy 2D數組中的單元格值以匹配數字

[英]Change cell values in numpy 2D array to match a number

import numpy as np
np.random.random((5,5))

array([[ 0.26045197,  0.66184973,  0.79957904,  0.82613958,  0.39644677],
       [ 0.09284838,  0.59098542,  0.13045167,  0.06170584,  0.01265676],
       [ 0.16456109,  0.87820099,  0.79891448,  0.02966868,  0.27810629],
       [ 0.03037986,  0.31481138,  0.06477025,  0.37205248,  0.59648463],
       [ 0.08084797,  0.10305354,  0.72488268,  0.30258304,  0.230913  ]])

我有一個二維的numpy數組,每個單元格值代表一個分數(介於0.0和1.0之間)。 我想修改2D數組,以使數組平均值與特定數字匹配,例如0.8。 為此,我想使用foll。 算法:

  1. 計算二維數組的平均值。 假設給定2D數組為0.6

  2. 對於網格中的每個像元(例如值為0.25),將其值增加/減少一個等於(0.8-0.6,即0.2)的值。

  3. 如果在步驟2中,更改使單元格值超過0.0 / 1.0,則將值設置為0.0 / 1.0並修改其他單元格以進行補償。

我可以這樣執行步驟1:

numpy.mean(arr)

我可以使用for循環執行第2步,但不確定如何執行第3步。同樣,首選Python方式。

Numpy的索引魔術很有趣,可以使用以下程序進行編程:

import numpy as np
aa = np.random.random((5, 5))

m = np.mean(aa)
d = 0.8 - m  # value to add
bb = aa + d

if d > 0:  # Modify values  != 1
    ii = aa + d > 1
    d2 = np.sum(bb[ii] - 1)
    bb[ii] = 1
    bb[~ii] = bb[~ii] + d2/np.sum(~ii)
elif d < 0:  # Modify values  != 0
    ii = aa + d < 0
    d2 = np.sum(bb[ii])
    bb[ii] = 1
    bb[~ii] = bb[~ii] + d2/np.sum(~ii)

print("The mean of bb is %f" % np.mean(bb))

出於好奇:難道不是對這些問題進行擴展,即乘以而不是減去更自然的方法嗎?

暫無
暫無

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

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