tft每日頭條

 > 生活

 > 矩陣計算可以換行嗎

矩陣計算可以換行嗎

生活 更新时间:2024-11-28 15:52:57

小夥伴們好啊,今天咱們來分享一個比較冷門的函數——MMULT。

這個函數的作用是返回兩個數組的矩陣乘積。

啥是數組?咱們可以理解為一組數。

哪啥是矩陣呢,就是有數據的矩形單元格區域,例如下面這兩個長方形或是正方形的區域:

矩陣計算可以換行嗎(矩陣乘積沒問題)1

這個函數的參數很簡單:

MMULT(數組1,數組2)

兩個數組在計算時,要求數組1的行數與數組2的列數相同,或者數組1的列數與數組2的行數相同。

比如下圖中,左側部分的兩個數組因為列數與行數符合要求,就可以當成MMULT函數的兩個參數進行計算,而右側的兩個數組則因為列數與行數不符合要求,就不能使用MMULT函數進行運算了。

矩陣計算可以換行嗎(矩陣乘積沒問題)2

函數結果會得到一個新的矩陣,這個矩陣的行數與 數組1 的行數相同,列數與 數組2 的列數相同。

矩陣計算可以換行嗎(矩陣乘積沒問題)3

上圖中藍色區域的公式結果看起來有點亂,其實就是用垂直方向的這個數組中的每個元素與水平方向數組中的每個元素對應相乘。

光看這些解釋,很多小夥伴肯定會覺得這樣太抽象了,下面咱們就來點具體的,用幾個簡單實例,來說說MMULT函數的基本用法。

1、計算綜合成績

如下圖所示,每個同學有筆試和面試兩項成績,其中筆試成績占比為60%,面試成績占比為40%,現在需要計算綜合成績:

D2單元格輸入以下公式,下拉。

=MMULT(B2:C2,G$2:G$3)

矩陣計算可以換行嗎(矩陣乘積沒問題)4

公式的意思是使用水平方向的數組B2:C2,與垂直方向的數組G$2:G$3執行乘法計算,計算過程是:

=88(筆試成績)*60%(筆試占比) 90(面試成績)*40%(面試占比)

公式中的數組1(B2:C2)是一行,而數組2(G$2:G$3)是一列,所以最終得到一個數組結果,這個數組的大小隻有一行一列。

2、計算商品金額

如下圖所示,第一行和第二行分别是商品單價和商品名稱,在底部區域則是不同客戶購買各個商品的數量。

需要在K列計算每個客戶的應付金額。

矩陣計算可以換行嗎(矩陣乘積沒問題)5

如果在K2使用MMULT函數直接将數組1參數設置為表示數量的B3:J3,将數組2參數設置為表示單價的B1:J1,公式會返回錯誤值。

這是因為兩個數組都是9列1行,數組1的行數(1)與數組2的列數(9)不同,并且數組1的列數(9)與數組2的行數(1)也不同。

怎麼辦呢?咱們可以在公式中嵌套TRANSPOSE函數,将其中一個數組的行列方向進行轉置互換。

=MMULT(B3:J3,TRANSPOSE(B$1:J$1))

矩陣計算可以換行嗎(矩陣乘積沒問題)6

K2輸入上述公式後,結果仍然是錯誤值,為什麼呢?

這是因為數組1(B3:J3)中包含空白單元格了。

咱們将公式繼續修改一下,在有空白單元格的數組1後面乘以1,這樣一來,空白單元格變成了0,再計算就沒有問題了:

=MMULT(B3:J3*1,TRANSPOSE(B$1:J$1))

矩陣計算可以換行嗎(矩陣乘積沒問題)7

熟悉函數公式的小夥伴可能早看出來了,上面的兩個例子其實都可以使用SUMPRODUCT函數來完成,咱們就是為了讓大家熟悉一下這個函數的基礎用法。

下面再來說一個使用其他函數不太容易實現的問題。

3、餐費分攤

如下圖所示,是某單位國慶值班人員的用餐記錄。

F列是不同日期的餐費金額,B2:E7單元格區域是員工的進餐情況,1表示當日進餐次數為1,2表示當日進餐次數為2,空白表示當日沒有進餐。

矩陣計算可以換行嗎(矩陣乘積沒問題)8

需要在B8:E8單元格區域中,根據每日的進餐人數和餐費,計算每個人應分攤的餐費金額。

計算方法為當日餐費除以當日進餐總次數,如1日餐費為54元,進餐次數為2 1 3,則張三分攤金額為54/(2 1 3)*2 即18元。

在計算張三總的分攤金額時,需要先計算出每一天的用餐總次數,然後用每一天的餐費除以每一天的用餐總次數,最後再乘以張三在每天的用餐次數,得到張三每天的分攤餐費,最後相加即可。

B8單元格輸入以下數組公式,按<Ctrl Shift Enter>組合鍵結束編輯,然後向右複制到E8單元格。

=SUM($F2:$F7/MMULT($B2:$E7*1,1^ROW(1:4))*B2:B7)

由于$B2:$E7單元格區域中存在空白單元格,直接使用MMULT函數時将返回錯誤值,因此先乘以1将區域中的空白單元格轉換為0。

1^ROW(1:4)部分,返回4行1列的内存數組{1;1;1;1},結果用作MMULT函數的數組2參數。(因為數據範圍有四列,所以使用ROW(1:4),實際應用時可将4修改成實際的數據列數)

MMULT($B2:$E7*1,1^ROW(1:4))部分,依次計算每一行的矩陣相乘之和,返回内存數組結果為:

{6;7;6;3;4;7}

結果就是$B2:$E7單元格區域中每一行的總和,即每日進餐的總次數。

然後使用$F2:$F7單元格區域的每日餐費,除以MMULT函數得到的每日進餐總次數,得到在不同日期内的每次進餐應分攤金額。

再乘以B2:B7單元格區域中每天的個人進餐次數,得到張三每天的應分攤金額為:

{18;6;27.5;0;48;42.85}

最後使用SUM函數求和,得到應分攤餐費總額。

好了,今天咱們分享的内容就是這些吧,祝大家一天好心情!

圖文制作:祝洪忠

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved