1. 程式人生 > >我與資料科學 - [Today is Numpy] - [np隨用隨記]

我與資料科學 - [Today is Numpy] - [np隨用隨記]

numpy.loadtxt(fname, dtype=, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0)

data = np.loadtxt(path, dtype=float, delimiter=',', converters={4: iris_type})

skiprow表示跳過前幾行,用於有檔案標題和欄位說明的資料集

comment 表示跳過有符號標註的資料,預設#號

usecols 表示只使用指定的行

converters 表示預處理,可以是一個方法表示 {0 : fun} 對第0列進行fun函式處理

 

 

numpy.split(data, (a, b), axis = 0)

x, y = np.split(data, (4,), axis=1)

將資料集分成特徵和標籤,第二個引數前開後閉,表示將前四列和後面的列分開

 

 

 

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

t2 = np.linspace(x2_min, x2_max, M)

在指定的間隔內均勻的返回等間隔的數字

start 起始位置

stop 終止位置

num 取多少個數

endpoint 是否包括終止位置

retstep 為True則返回步長

 

 

numpy.meshgrid(*xi, **kwargs)

# 畫圖
N, M = 50, 50  # 橫縱各取樣多少個值
x1_min, x1_max = x[:, 0].min(), x[:, 0].max()  # 第0列的範圍
x2_min, x2_max = x[:, 1].min(), x[:, 1].max()  # 第1列的範圍
t1 = np.linspace(x1_min, x1_max, N)
t2 = np.linspace(x2_min, x2_max, M)
x1, x2 = np.meshgrid(t1, t2)  # 生成網格取樣點

從一個座標向量返回一個座標矩陣

 

 

numpy.flat

flat返回的是一個迭代器,可以使用for迴圈遍歷所有元素

import numpy as np
a = np.arange(4).reshape(2,2)
print(a)
for i in a.flat:
    print(i)
#迭代器可以用list進行輸出
print(list(a.flat))
print(type(a.flat))#返回型別為 numpy.flatiter
#可以用索引對迭代器進行引號
a.flat[3]
[[0 1]
 [2 3]]
0
1
2
3
[0, 1, 2, 3]
<class 'numpy.flatiter'>
3

 

 

np.stack(arrays,axis=0)

stack函式用於堆疊陣列,其中arrays即需要進行堆疊的陣列,axis是堆疊時使用的軸,比如:arrays = [[1,2,3,4], [5,6,7,8]]

這是一個二維陣列,axis=0表示的是第一維,也即是arrays[0] = [1,2,3,4]或者arrays[1] = [5,6,7,8]

axis=i時,代表在堆疊時首先選取第i維進行“打包”。

當執行np.stack(arrays, axis=0)時,取出第一維的1、2、3、4,打包,[1, 2, 3, 4],其餘的類似,然後結果如下

>>> arrays = [[1,2,3,4], [5,6,7,8]]
>>> arrays=np.array(arrays)
>>> np.stack(arrays,axis=0)
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])

當執行np.stack(arrays, axis=1)時,先對arrays中的第二維進行“打包”,也即是將1、5打包成[1, 5],其餘的類似,結果如下: 

>>> np.stack(arrays, axis=1)
array([[1, 5],
       [2, 6],
       [3, 7],
       [4, 8]])

我自己的理解就是 axis = 0的時候 自頂向下打包,axis = 1的時候自左向右打包

 

 

np.concatenate((a1,a2,a3,...), axis=0)

這個函式就是按照特定方向軸進行拼接,預設是第一維,在numpy官網上的示例如下: 

>>> a = np.array([[1, 2], [3, 4]])
>>> b = np.array([[5, 6]])
>>> np.concatenate((a, b), axis=0)
array([[1, 2],
       [3, 4],
       [5, 6]])
>>> np.concatenate((a, b.T), axis=1)
array([[1, 2, 5],
       [3, 4, 6]])

我自己的理解就是 axis = 0就是豎著拼接(往下加),axis = 1就是橫著拼接 (往右加),axis = 2就是往你臉上加,想象成一個三維的

 

 

np.hstack(tup)

按照列的方向堆疊, tup可以是元組,列表,或者numpy陣列, 其實也就是axis=1,即

np.hstack(tup) = np.concatenate(tup, axis=1),就是上一個api中我自己的理解,往右邊加,水平方向的

按照上面對concatenate的理解則下面的示例很好理解

>>> a = np.array((1,2,3))
>>> b = np.array((2,3,4))
>>> np.hstack((a,b))
array([1, 2, 3, 2, 3, 4])
>>> a = np.array([[1],[2],[3]])
>>> b = np.array([[2],[3],[4]])
>>> np.hstack((a,b))
array([[1, 2],
       [2, 3],
       [3, 4]])


 

 

 

np.vstack(tup),

按照行的方向堆疊, tup可以是元組,列表,或者numpy陣列, 理解起來與上相同

np.vstack(tup) = np.concatenate(tup, axis=0),就是上上一個api中我自己的理解,往下邊加,垂直方向的

>>> a = np.array([1, 2, 3])
>>> b = np.array([2, 3, 4])
>>> np.vstack((a,b))
array([[1, 2, 3],
       [2, 3, 4]])

>>> a = np.array([[1], [2], [3]])
>>> b = np.array([[2], [3], [4]])
>>> np.vstack((a,b))
array([[1],
       [2],
       [3],
       [2],
       [3],
       [4]])

 

 

 

numpy.random.randint

low、high、size三個引數。預設high是None,如果只有low,那範圍就是[0,low)。如果有high,範圍就是[low,high)

>>> np.random.randint(2, size=10)
array([1, 0, 0, 0, 1, 1, 0, 0, 1, 0])

>>> np.random.randint(1, size=10)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])

>>> np.random.randint(5, size=(2, 4))
array([[4, 0, 2, 1],
       [3, 2, 2, 0]])

 

 

numpy.random.rand(d0, d1, ..., dn)

隨機樣本位於[0, 1)中,引數為陣列的尺寸

numpy.random.randn(d0, d1, …, dn)

標準正態分佈中返回一個或多個樣本值

 

 

 

np.empty(shape[, dtype, order])

依據給定形狀和型別(shape[, dtype, order])返回一個新的空陣列。

shape : 整數或者整型元組,定義返回陣列的形狀;

dtype : 資料型別,可選,定義返回陣列的型別。

order : {‘C’, ‘F’}, 可選,規定返回陣列元素在記憶體的儲存順序:C(C語言)-row-major;F(Fortran)column-major。

>>> np.empty([2, 2])
array([[ -9.74499359e+001, 6.69583040e-309],
[ 2.13182611e-314, 3.06959433e-309]])    #random
 
>>> np.empty([2, 2], dtype=int)
array([[-1073741821, -1067949133],
[ 496041986, 19249760]])    #random

np.empty_like(a)

依據給定陣列(a)的形狀和型別返回一個新的空陣列。

 

 

 

np.set_printoptions 設定當前print輸出的資料的一些格式

原函式:

set_printoptions(precision=None, threshold=None, edgeitems=None, linewidth=None, suppress=None, nanstr=None, infstr=None)

precision : float輸出的精度,即小數點後維數,預設8

threshold : 當陣列數目過大時,設定顯示幾個數字,其餘用省略號 。np.nan為全部顯示

edgeitems : 資料邊緣展示多少資料

suppress : 是否壓縮由科學計數法表示的浮點數

 

 

np.logspace返回等比數列,和linespace對應 linespace返回等差數列

start,起始數字,表示base的多少次方,如0表示base的0次方

end,結束數字,表示base的多少次方,0表示base的0次方

base 底數預設為10

>>> a = np.logspace(0,9,10)
>>> a
array([  1.00000000e+00,   1.00000000e+01,   1.00000000e+02,
         1.00000000e+03,   1.00000000e+04,   1.00000000e+05,
         1.00000000e+06,   1.00000000e+07,   1.00000000e+08,
         1.00000000e+09])