本文目錄一覽:
python基礎之numpy.reshape詳解
這個方法是在不改變數據內容的情況下,改變一個數組的格式,參數及返回值,官網介紹:
a:數組–需要處理的數據
newshape:新的格式–整數或整數數組,如(2,3)表示2行3列,新的形狀應該與原來的形狀兼容,即行數和列數相乘後等於a中元素的數量
order:
首先做出翻譯: order : 可選範圍為{『C』, 『F』, 『A』}。使用索引順序讀取a的元素,並按照索引順序將元素放到變換後的的數組中。如果不進行order參數的設置,默認參數為C。
(1)「C」指的是用類C寫的讀/索引順序的元素,最後一個維度變化最快,第一個維度變化最慢。以二維數組為例,簡單來講就是橫著讀,橫著寫,優先讀/寫一行。
(2)「F」是指用FORTRAN類索引順序讀/寫元素,最後一個維度變化最慢,第一個維度變化最快。豎著讀,豎著寫,優先讀/寫一列。注意,「C」和「F」選項不考慮底層數組的內存布局,只引用索引的順序。
(3)「A」選項所生成的數組的效果與原數組a的數據存儲方式有關,如果數據是按照FORTRAN存儲的話,它的生成效果與」F「相同,否則與「C」相同。這裡可能聽起來有點模糊,下面會給出示例。
二、示例解釋
1、首先隨機生成一個4行3列的數組
2、使用reshape,這裡有兩種使用方法,可以使用np.reshape(r,(-1,1),order=’F’),也可以使用r1=r.reshape((-1,1),order=’F’),這裡我選擇使用第二種方法。通過示例可以觀察不同的order參數效果。
通過例子可以看出來,F是優先對列信息進行操作,而C是優先行信息操作。如果未對r的格式進行設置,那麼我們rashape的時候以「A」的順序進行order的話,它的效果和「C」相同。
3、我們將r的存儲方式進行修改,修改為類Fortan的方式進行存儲。並做與第2步類似的操作。
基礎操作樣例:
1.引入numpy,名稱為np
2.接下來創建一個數組a,可以看到這是一個一維的數組
3.使用reshape()方法來更改數組的形狀,可以看到看數組d成為了一個二維數組
4.通過reshape生成的新數組和原始數組公用一個內存,也就是說,假如更改一個數組的元素,另一個數組也將發生改變
5.同理還可以得到一個三維數組
reshape(-1,1)什麼意思:
大意是說,數組新的shape屬性應該要與原來的配套,如果等於-1的話,那麼Numpy會根據剩下的維度計算出數組的另外一個shape屬性值。
舉例:
同理,只給定行數,newshape等於-1,Numpy也可以自動計算出新數組的列數。
(Python)numpy 常用操作
不放回取樣:
從列表ori中不放回地取n個數
通過這種操作,我們可以獲得一個二維列表的子集:
(如果這個二維列表是圖的鄰接矩陣,那麼就是對圖進行隨機採樣,獲得一個圖的子圖)
首先要注意,”+” 操作對於list和numpy.array是完全不同的
python 中的list,”+”代表拼接:
在numpy.array中,”+”代表矩陣相加
keepdim指的是維度不變,常在sum中使用。如:
會發現,keepdim之後還是二維的
這裡要注意,pytorch和numpy里max()函數的返回值是不同的
pytorch:
也就是說,max(1)代表求第一維的最大值,對於二維數組來說,就是求縱向的最大值,然後,第一個返回值是最大值所形成數組,第二個返回值是最大值所在的索引。這一個技巧在機器學習的分類任務中很常用,比如我們的分類任務是把數據分成m類,那麼最終我們模型的輸出是m維的,對於n個樣本就是n*m,如果要判斷我們的模型最終的分類結果,就是找n個樣本里,每個樣本m維輸出的最大值索引,代表樣本是這個類的可能性最大。我們可以方便地用這種方式找到最大值地索引:
其中test_out是模型輸出,predict_y則是分類結果
另外一點要注意的是,numpy與pytorch不同,numpy的max()只有一個返回值:
也就是說,numpy.max()不會返回最大值所在的索引
圖解Python中數據分析工具包:Numpy
numpy是我學習python遇到的第一個第三方工具包,它可以讓我們快速上手數據分析。numpy提供了向量和矩陣計算和處理的大部分介面。目前很多python的基礎工具包都是基於numpy開發而來,比如 scikit-learn, SciPy, pandas, 還有 tensorflow。 numpy可以處理表格、圖像、文本等數據,極大地方便我們處理和分析數據。本文主要內容來自於Jay Alammar的一篇文章以及自己學習記錄。
原文地址:
使用過程中,如果希望 Numpy 能創建並初始化數組的值, Numpy 提供了 ones()、zeros() 和 random.random() 等方法。只需傳遞希望生成的元素數量(大小)即可:
還可以進行如下操作:
一般,需要數組和單個數字之間也可以進行運算操作(即向量和標量之間的運算)。比如說 data * 1.6 ,numpy利用一個叫做廣播機制(broadcasting)的概念實現了這一運算。:
我們可以通過索引對numpy數據獲取任意位置數據或者對數據切片
我們可以通過numpy自帶的函數對數據進行一些想要的聚合計算,比如min、max 和 sum ,還可以使用 mean 得到平均值,使用 prod 得到所有元素的乘積,使用 std 得到標準差等等。
上述操作不僅可以應用於單維度數據,還可以用於多維度數據{(矩陣)。
同樣可以使用ones()、zeros() 和 random.random()創建矩陣,只要寫入一個描述矩陣維數的元組即可:
numpy還可以處理更高維度的數據:
創建更高維度數據只需要在創建時,在參數中增加一個維度值即可:
根據數組中數值是否滿足條件,輸出為True或False.
希望得到滿足條件的索引,用np.where函數實現.
根據索引得到對應位置的值.
np.where也可以接受另兩個可選擇的參數a和b。當條件滿足時,輸出a,反之輸出b.
獲取數組最大值和最小值的索引可以使用np.argmax和np.argmin.
1、numpy.tofile()和numpy.fromfile()
保存為二進位格式,但是不保存數組形狀和數據類型, 即都壓縮為一維的數組,需要自己記錄數據的形狀,讀取的時候再reshape.
2、numpy.save() 和 numpy.load()
保存為二進位格式,保存數組形狀和數據類型, 不需要進行reshape
實例:
3、numpy.savetxt()和numpy.loadtxt()
np.savetxt(fname,array,fmt=』%.18e』,delimiter=None)
Parameter解釋:
array:待存入文件的數組。
fmt:寫入文件的格式
實例:
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/238515.html