第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

如何求和/平均列或行的特定子集并在numpy中返回新的ndarray?

如何求和/平均列或行的特定子集并在numpy中返回新的ndarray?

慕神8447489 2022-07-05 19:20:27
為了說明,成像我有以下ndarray:x = [[0.5,  0.3,  0.1,  0.1],     [0.4,  0.1,  0.3,  0.2],     [0.4,  0.3,  0.2,  0.1],     [0.6,  0.1,  0.1,  0.2]]我想對第 1 列和第 2 列的兩個向量求和(從 0 開始計數(shù)),這樣新的 ndarray 將是:y = [[0.5,  0.4,  0.1],     [0.4,  0.4,  0.2],     [0.4,  0.5,  0.1],     [0.6,  0.2,  0.2]]然后,我想對第 1 行和第 2 行的向量進(jìn)行平均,以便最終結(jié)果為:z = [[0.5,  0.4,   0.1 ],     [0.4,  0.45,  0.15],     [0.6,  0.2,   0.2 ]]有沒有一種有效的方法可以在一個命令中在 numpy 中做到這一點?我真的需要效率,因為此操作將在嵌套循環(huán)中應(yīng)用。
查看完整描述

3 回答

?
小怪獸愛吃肉

TA貢獻(xiàn)1852條經(jīng)驗 獲得超1個贊

您可以sum很容易地列:


a_summed = np.sum(a[:,1:3], axis=1)

您還可以取多行的平均值:


a_mean = np.mean(a[1:3], axis=0)

您所要做的就是替換并刪除剩余的列,因此它變?yōu)椋?/p>


import numpy as np


a_summed = np.sum(a[:,1:3], axis=1)

a[:, 1] = a_summed

a = np.delete(a, 2, 1)

a_mean = np.mean(a[1:3], axis=0)

a[1] = a_mean

a = np.delete(a, 2, 0)

print(a)


查看完整回答
反對 回復(fù) 2022-07-05
?
嚕嚕噠

TA貢獻(xiàn)1784條經(jīng)驗 獲得超7個贊

In [68]: x = [[0.5,  0.3,  0.1,  0.1], 

    ...:      [0.4,  0.1,  0.3,  0.2], 

    ...:      [0.4,  0.3,  0.2,  0.1], 

    ...:      [0.6,  0.1,  0.1,  0.2]]                                                           

In [69]: x=np.array(x)

ufunc比如np.add有一種reduceat方法可以讓我們對多組行或列執(zhí)行操作。有了第一個減少很容易(但需要一點時間來理解參數(shù)):


In [70]: np.add.reduceat(x,[0,1,3], axis=1)                                                      

Out[70]: 

array([[0.5, 0.4, 0.1],

       [0.4, 0.4, 0.2],

       [0.4, 0.5, 0.1],

       [0.6, 0.2, 0.2]])

顯然mean不是 a ufunc,所以我不得不滿足add于減少行數(shù):


In [71]: np.add.reduceat(Out[70],[0,1,3],axis=0)                                                 

Out[71]: 

array([[0.5, 0.4, 0.1],

       [0.8, 0.9, 0.3],

       [0.6, 0.2, 0.2]])

然后除以行數(shù)得到平均值。我可以將其概括為使用 中使用的相同[0,1,3],reduceat但現(xiàn)在只使用列數(shù)組:


In [72]: np.add.reduceat(Out[70],[0,1,3],axis=0)/np.array([1,2,1])[:,None]                       

Out[72]: 

array([[0.5 , 0.4 , 0.1 ],

       [0.4 , 0.45, 0.15],

       [0.6 , 0.2 , 0.2 ]])

整個事情都在一個表達(dá)式中:


In [73]: np.add.reduceat(np.add.reduceat(x,[0,1,3], axis=1),[0,1,3],axis=0)/ np.array([1,2,1])[:,None]                                                                                    

Out[73]: 

array([[0.5 , 0.4 , 0.1 ],

       [0.4 , 0.45, 0.15],

       [0.6 , 0.2 , 0.2 ]])


查看完整回答
反對 回復(fù) 2022-07-05
?
蠱毒傳說

TA貢獻(xiàn)1895條經(jīng)驗 獲得超3個贊

由于您正在更改原始矩陣大小,因此最好分兩步完成,如前面的答案中所述,但是,如果您想在一個命令中執(zhí)行此操作,您可以按如下方式執(zhí)行,它可以提供一個很好的通用解決方案:


import numpy as np


x = np.array(([0.5,  0.3,  0.1,  0.1, 1],

                [0.4,  0.1,  0.3,  0.2, 1],

                [0.4,  0.3,  0.2,  0.1, 1],

                [0.6,  0.1,  0.1,  0.2, 1]))


def sum_columns(matrix, col_start, col_end):

    return np.column_stack((matrix[:, 0:col_start],

                            np.sum(matrix[:, col_start:col_end + 1], axis=1),

                            matrix[:, col_end + 1:]))


def avgRows_summedColumns(matrix, row_start, row_end):

    return np.row_stack((matrix[0:row_start, :],

                        np.mean(matrix[row_start:row_end + 1, :], axis=0),

                        matrix[row_end:-1, :]))


# call the entire operation in one command

print(avgRows_summedColumns(sum_columns(x, 1, 2), 1, 2))

這樣,您的矩陣有多大并不重要。


查看完整回答
反對 回復(fù) 2022-07-05
  • 3 回答
  • 0 關(guān)注
  • 122 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號