Numpy建立陣列--Numpy(二)
Numpy建立陣列
引入:
上次我們瞭解了Numpy操作的物件是Ndarray陣列,並學習了一些Numpy陣列的基本屬性。實際上,Numpy的基本思想就是面向陣列程式設計,在資料處理中,我們往往需要對某一行或列進行處理,這時就需要用Numpy提取為Ndarray物件進行處理。現在讓我們真正開始Numpy的學習,就像我們學習大多數語言那樣,我們該如何創建出一個物件?這就是本節的重點,Numpy建立陣列。
numpy.empty
numpy.empty 方法用來建立一個指定形狀(shape)、資料型別(dtype)且未初始化的陣列,我們有如下三個引數可供選擇:
引數 | 描述 |
---|---|
shape | 陣列形狀 |
dtype | 資料型別,可選 |
order | 有"C"和"F"兩個選項,分別代表,行優先和列優先,在計算機記憶體中的儲存元素的順序。 |
現在讓我們建立一個數組!
import numpy as np
x = np.empty([3,2], dtype = int)
print (x)
得到:
[[ 0 1072693248]
[ 0 1073741824]
[ 0 1074266112]]
numpy.zeros
numpy.zeros用來建立指定大小的陣列,陣列元素以 0 來填充。
我們來看以下三個例子,這三個例子更加有助於我們瞭解方法的引數列表.
# 預設為浮點數
x = np.zeros(5)
print(x)
# 設定型別為整數
y = np.zeros((5,), dtype = np.int)
print(y)
# 自定義型別
z = np.zeros((2,2), dtype = [('x', 'i4'), ('y', 'i4')])
print(z)
這三個結果分別是:
[0. 0. 0. 0. 0.]
[0 0 0 0 0]
[[(0, 0) (0, 0)]
[(0, 0) (0, 0)]]
另一個簡潔的例子:
z = np.zeros((2,2))
print(z)
得到:
[[0. 0.]
[0. 0.]]
numpy.ones
numpy.ones同上述方法,它返回的均是1.
# 預設為浮點數
x = np.ones(5)
print(x)
# 自定義型別
x = np.ones([2,2], dtype = int)
print(x)
返回:
[1. 1. 1. 1. 1.]
[[1 1]
[1 1]]
Numpy 建立標準正態分佈陣列
在機器學習中,我們經常需要資料保持標準正態分佈,Nmupy給我們提供了一個可以建立符合正態分佈標準的陣列。
from numpy import *
a=random.randint(100,200,(3,3))
print(a)
這個陣列為:
[[122 108 183]
[151 101 108]
[145 102 133]]
總結:
通過上述幾個方法,你現在一定已經學會了最基本建立陣列的方法,接下來我們將學習如何從已有的陣列建立新的陣列。
NumPy 從已有的陣列建立陣列
numpy.asarray
numpy中的asarray方法可以將Python中的各種原始型別轉換為numpy中的ndarray陣列型別。
引數列表如下:
numpy.asarray(a, dtype = None, order = None)
引數 | 描述 |
---|---|
a | 任意形式的輸入引數,可以是,列表, 列表的元組, 元組, 元組的元組, 元組的列表,多維陣列 |
dtype | 資料型別,可選 |
order | 可選,有"C"和"F"兩個選項,分別代表,行優先和列優先,在計算機記憶體中的儲存元素的順序。 |
讓我們舉一個最簡單的例子:
import numpy as np
x = [1,2,3]
a = np.asarray(x)
print (a)
得到新的ndarray陣列:
[1 2 3]
numpy.frombuffer
numpy.frombuffer 用於實現動態陣列。
numpy.frombuffer(buffer, dtype = float, count = -1, offset = 0)
注意:buffer 是字串的時候,Python3 預設 str 是 Unicode 型別,所以要轉成 bytestring 在原 str 前加上 b。
引數 描述 buffer 可以是任意物件,會以流的形式讀入。 dtype 返回陣列的資料型別,可選 count 讀取的資料數量,預設為-1,讀取所有資料。 offset 讀取的起始位置,預設為0。
可以用來讀入字串並將其轉換為ndarray陣列型別:
import numpy as np
s = b'Hello World'
a = np.frombuffer(s, dtype = 'S1')
print (a)
[b'H' b'e' b'l' b'l' b'o' b' ' b'W' b'o' b'r' b'l' b'd']
numpy.fromiter
numpy.fromiter 方法從可迭代物件中建立 ndarray 物件,返回一維陣列。
# 使用 range 函式建立列表物件
list=range(5)
it=iter(list)
# 使用迭代器建立 ndarray
x=np.fromiter(it, dtype=float)
print(x)
返回結果:
[0. 1. 2. 3. 4.]
上述例子實際上是先構造一個迴圈到4為止的陣列,迭代器就是 相當於i++的功能,隨著i的不斷迴圈,i不斷自增。然後將這個陣列轉換為Ndarray物件。
NumPy 從數值範圍建立陣列
接下來的三個方法將是我們在資料處理中最常使用的三種方法。
numpy.arange
根據 start 與 stop 指定的範圍以及 step 設定的步長,生成一個 ndarray。
引數 | 描述 |
---|---|
start |
起始值,預設為0 |
stop |
終止值(不包含) |
step |
步長,預設為1 |
dtype |
返回ndarray 的資料型別,如果沒有提供,則會使用輸入資料的型別。 |
基本例子:
x = np.arange(5)
print (x)
得到結果:
[0 1 2 3 4]
設定了dtype:
x = np.arange(5, dtype = float)
print (x)
結果為浮點數:
[0. 1. 2. 3. 4.]
設定了起始值、終止值及步長:
x = np.arange(10,20,2)
print (x)
結果為從10開始,到20結束(不包括20),間隔為2的ndarray型別陣列:
[10 12 14 16 18]
numpy.linspace
numpy.linspace 函式用於建立一個一維陣列,陣列是一個等差數列構成的,格式如下:
a = np.linspace(1,10,10)
設定元素全部是1的等差數列:
a = np.linspace(1,1,10)
將 endpoint 設為 false,不包含終止值:
a = np.linspace(10, 20, 5, endpoint = False)
如果將 endpoint 設為 true,則會包含 20。
以下例項設定間距。
a =np.linspace(1,10,10,retstep= True)
print(a)
# 拓展例子
b =np.linspace(1,10,10).reshape([10,1])
print(b)
(array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]), 1.0)
[[ 1.]
[ 2.]
[ 3.]
[ 4.]
[ 5.]
[ 6.]
[ 7.]
[ 8.]
[ 9.]
[10.]]
numpy.logspace
numpy.logspace 函式用於建立一個於等比數列。格式如下:
# 預設底數是 10
a = np.logspace(1.0, 2.0, num = 10)
設定底數為2
a = np.logspace(0,9,10,base=2)