Datawhale十二月Pandas組學習打卡--Task01.預備知識練習題

2021-03-02 網安雜談
編號112打卡預備知識的練習題,也可以通過幕布來查看思維導圖模式:https://share.mubu.com/doc/gcPiai7k5T

練習題

Ex1:利用列表推導式寫矩陣乘法

●一般的矩陣乘法根據公式,可以由三重循環寫出:

●解:先回憶一下列表推導式的形式

●列表推導式(又稱列表解析式)提供了一種簡明扼要的方法來創建列表。

●列表推導式形式:[表達式 for 變量 in 列表]    或者  [表達式 for 變量 in 列表 if 條件]

●它的結構是在一個中括號裡包含一個表達式,然後是一個for語句,然後是 0 個或多個 for 或者 if 語句。表達式可以是任意的,意思是你可以在列表中放入任意類型的對象。返回結果將是一個新的列表,在這個以 if 和 for 語句為上下文的表達式運行完成之後產生。

●列表推導式的執行順序:各語句之間是嵌套關係,左邊第二個語句是最外層,依次往右進一層,左邊第一條語句是最後一層。

M1 = np.random.rand(2,3) #產生一個隨機矩陣2*3print(M1)[[0.5488135  0.71518937 0.60276338] [0.54488318 0.4236548  0.64589411]]
In [113]:M2 = np.random.rand(3,4)#產生一個隨機矩陣 3*4print(M2)[[0.43758721 0.891773 0.96366276 0.38344152] [0.79172504 0.52889492 0.56804456 0.92559664] [0.07103606 0.0871293 0.0202184 0.83261985]]
In [114]:res = np.empty((M1.shape[0],M2.shape[1]))#產生一個給定形狀和類型的新數組,不初始化entryprint(res)[[-7.6257842 -7.39469974 -7.3765087 -7.82499163] [-7.32639951 -7.00701384 -7.29012189 -7.63867444]]
In [135]:for i in range(M1.shape[0]): for j in range(M2.shape[1]): item = 0 for k in range(M1.shape[1]): item += M1[i][k] * M2[k][j] res[i][j] = itemprint(res)[[0.8492050332765654, 0.9201954386455283, 0.9473174754148058, 1.3742875058416857], [0.6197337964575249, 0.7662572840289622, 0.7787973807055315, 1.1388485499974779]]
In [136]:res=[[sum([M1[i][k] * M2[k][j] for k in range(M1.shape[1])]) for j in range(M2.shape[1])] for i in range(M1.shape[0])]#用列表推導式形式print(res)[[0.8492050332765654, 0.9201954386455283, 0.9473174754148058, 1.3742875058416857], [0.6197337964575249, 0.7662572840289622, 0.7787973807055315, 1.1388485499974779]]
In [137]:M1@M2 - resOut[137]:array([[0., 0., 0., 0.], [0., 0., 0., 0.]])In [138]:((M1@M2-res)< 1e-15).all()## 排除我們的結果是不是準確(和真正的矩陣乘法結果對比誤差小於1e-15)Out[138]:True

Ex2:更新矩陣

這個題應該就是考察廣播機制吧

import numpy as npm=3n=3A=np.arange(9).reshape(m,n)#這樣生成的A是不對的,因為不能有為0的元素print(A)[[0 1 2] [3 4 5] [6 7 8]]
A = np.arange(1,10).reshape(3,-1)#這樣弄成不含有0的就行了print(A)[[1 2 3] [4 5 6] [7 8 9]]
B=A*(1/A).sum(1).reshape(-1,1)print(B)[[1.83333333 3.66666667 5.5 ] [2.46666667 3.08333333 3.7 ] [2.65277778 3.03174603 3.41071429]]

Ex3:卡方統計量

A = np.random.randint(10, 20, (8, 5))print(A)[[19 19 10 14 17] [13 12 17 12 10] [10 14 15 15 16] [18 14 11 14 19] [18 11 11 17 19] [19 13 16 17 12] [10 13 15 19 14] [14 16 14 14 13]]
A.sum(0)#按列相加array([121, 112, 109, 122, 120])
A.sum(1)#按行相加array([79, 64, 70, 76, 76, 77, 71, 71])
A.sum(0)*A.sum(1)#這樣會出錯的ValueError Traceback (most recent call last)<ipython-input-52-bb25f4d5b1de> in <module>----> 1 A.sum(0)*A.sum(1)ValueError: operands could not be broadcast together with shapes (5,) (8,)
A.sum(0)*A.sum(1).reshape(-1,1)#所以這裡要reshapearray([[9559, 8848, 8611, 9638, 9480], [7744, 7168, 6976, 7808, 7680], [8470, 7840, 7630, 8540, 8400], [9196, 8512, 8284, 9272, 9120], [9196, 8512, 8284, 9272, 9120], [9317, 8624, 8393, 9394, 9240], [8591, 7952, 7739, 8662, 8520], [8591, 7952, 7739, 8662, 8520]])B = A.sum(0)*A.sum(1).reshape(-1, 1)/A.sum()print(B)[[16.36815068 15.15068493 14.74486301 16.50342466 16.23287671] [13.26027397 12.2739726 11.94520548 13.36986301 13.15068493] [14.50342466 13.42465753 13.06506849 14.62328767 14.38356164] [15.74657534 14.57534247 14.18493151 15.87671233 15.61643836] [15.74657534 14.57534247 14.18493151 15.87671233 15.61643836] [15.95376712 14.76712329 14.37157534 16.08561644 15.82191781] [14.71061644 13.61643836 13.25171233 14.83219178 14.5890411 ] [14.71061644 13.61643836 13.25171233 14.83219178 14.5890411 ]]res = ((A-B)**2/B).sum()print(res)18.661200646129636

Ex4:改進矩陣計算的性能

●  題目:

●  原方法是這樣的:

●  怎麼改進呢????

●  這裡我是照搬老師的

●  我只能說大約看懂了,實踐一下試試

●  (((B**2).sum(1).reshape(-1,1) + (U**2).sum(0) -2*B@U)*Z).sum()#這個新方法看起來十分不錯

●  對比時間的開銷,好的果然不一般。。。

Ex5:連續整數的最大長度輸入一個整數的 Numpy 數組,返回其中遞增連續整數子數組的最大長度。例如,輸入 [1,2,5,6,7],[5,6,7]為具有最大長度的遞增連續整數子數組,因此輸出3;輸入[3,2,1,2,3,4,6],[1,2,3,4]為具有最大長度的遞增連續整數子數組,因此輸出4。請充分利用 Numpy 的內置函數完成。(提示:考慮使用 nonzero, diff 函數)。numpy.nonzero(a)  作用:函數返回輸入數組中非零元素的索引diff 表示和前一個元素做差,由於第一個元素為缺失值,因此在默認參數情況下,返回長度是原數組減1 f = lambda x:np.diff(np.nonzero(np.r_[1,np.diff(x)!=1,1])).max()

相關焦點

  • Datawhale組隊學習-pandas task04
    \datawhale組隊學習\pandas組隊學習\joyful-pandas-master')'F:\\Jupyter\\學習\\datawhale組隊學習\\pandas組隊學習\\joyful-pandas-master'一、分組模式及其對象1.
  • Numpy學習打卡task03
    講義連結:http://datawhale.club
  • Excel函數打卡學習群
    我在學習excel函數的過程中,真是越學越感覺它的妙處無窮。比如,我舉個例子:求和小紅在9月2日的分數。學習Excel也是一樣的,並不是以學會某個複雜的公式為目的,也不是以炫技為目的,而應該以解決實際問題為目的。但大家平時都很忙,怎麼抽時間去學呢?最近我也在不斷利用零碎時間去學習excel的知識,所以我想建立一個Excel打卡學習群,每天都會發一個很實用的函數教程,然後留下一個作業。
  • 對比Excel,學習pandas數據透視表
    ③ 選擇在Excel中的哪個位置,插入數據透視表④ 然後根據實際需求,從不同維度展示結果⑤ 結果如下p1)求出不同品牌下,每個月份的銷售數量之和① 在Excel中的操作結果如下② 在p2)求出不同品牌下,每個地區、每個月份的銷售數量之和① 在Excel中的操作結果如下② 在p
  • SQL面試題洩露!做完這50道練習題你就過關了!
    做完這些題,恭喜你!你的 SQL 就算過關了!1.查詢至少有一門課與學號為" 01 "的同學所學相同的同學的信息 9. 查詢和" 01 "號的同學學習的課程完全相同的其他同學的信息 10.查詢沒學過"張三"老師講授的任一門課程的學生姓名 45題的內容實在太多了,剩餘的35道題和答案小編已經分別整理成了一份試卷,後臺留言【SQL50】即可領取哦~鐺鐺鐺!!答案來了。
  • 財務進階,pandas合併報表的三種方法!
    pandas中有三種合併方法,分別是.merge、.concat、.join,三種都很重要,理解這三種合併方法對我們的工作非常有幫助。merge有點像EXCEL中的vlookup函數,但有點不一樣的是他可以根據多個不同的列將表格連接起來。
  • 用Excel批量生成100以內的加減法練習題,需要模板的速來
    這天我做了一份自動生成100以內加減法練習的模板,效果相當贊,簡直是給小朋友布置作業的神器啊!首先來看看效果吧!
  • 面試題 01.08. 零矩陣 / 01.09. 字符串輪轉
    面試題 01.08. 零矩陣
  • 讀書筆記 |《好好學習》成甲
    知識深度就是認知深度,也就是分析具體現象之後找出抽象規律的能力。而具體現象背後有底層規律在發揮作用,學習臨界知識就能透過現象看本質。這也就是我們為什麼需要學習臨界知識的理由。三、怎麼樣?知道了什麼是底層規律、為什麼要學習底層規律之後,我們該如何來發現並運用底層規律呢?
  • 詞彙基本功打卡-Day2
    洪橋君 大家好~說起備考MBA/MPA/MEM等大家最頭疼的應該是數學和英語洪橋君邀請大家進入基本功詞彙打卡單元
  • 使用Pandas讀寫操作excel
    https://pandas.pydata.org/pandas-docs/stable/https://pandas.pydata.org
  • 每日練習17| 好好學習,天天向上,學習是知識的海洋!
    5.9元=《綜合基礎知識1001題》+《趣學公基》
  • 你也是「星巴克氣氛組」的?外媒:在咖啡館工作學習真的高產!
    一個回復直接被頂上熱搜:星巴克氣氛組。所謂氣氛組,是網絡流行詞,指營造氣氛、活躍氣氛的人,可用在各種場合。那麼,在咖啡館工作學習真的會提高我們的效率嗎?沒錯!據研究調查表明,咖啡館所具有的一些特點能夠激發我們在辦公學習時的創造力(trigger our creativity)。
  • 用pandas處理Excel
    於是,數據科學家開始使用R、Stata或Python讀取Excel文件,在純代碼環境下進行數據處理——pandas就是最好用的工具之一。2 數據觀察讀取後的data變量是數據框類型,默認表格的第一行是列標籤,pandas會自動為數據框添加行標籤。我們可以通過 head()和 tail()方法觀察數據框對象的前幾行和後幾行,以此確定數據內容,特別是了解行標籤和列標籤。
  • Pandas進階Excel【四】——篩選
    import pandas as pddata = pd.read_excel(r"C:\Users\Administrator\Desktop\火影忍者\pandasimport pandas as pddata = pd.read_excel(r"C:\Users\Administrator\Desktop\火影忍者\pandas
  • 反覆練習,養成習慣,就是最好的學習方法
    學習之所以能使人們進步,是因為我們不斷學習前輩的經驗和智慧,站在前輩的肩膀上,屹立於遠方,探索更多的未知數,以便社會文明進一步發展。我們的生活會更好。學習是一個連續的過程。生活和學習是每個人的共識,但實際上,許多人害怕新知識並抵制新學習,因此獨自一人是非常不可取的。社會總是日新月異。如果您放棄學習,您也將放棄進步。
  • pandas的iloc和loc到底是有什麼區別?
    說起pandas最讓我這個小白頭疼的,就是pandas的iloc和loc,剛開始上大學的時候,其實還有ix。
  • 一道Pandas面試題:三種實現方法
    使用p