国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

python綜合學(xué)習(xí)四之Numpy和Pandas(下)

yeyan1996 / 1674人閱讀

摘要:一基礎(chǔ)運(yùn)算二通過上一節(jié)的學(xué)習(xí),我們可以了解到一部分矩陣中元素的計(jì)算和查找操作。相應(yīng)的,在矩陣的個(gè)元素中,最小值即,對應(yīng)索引,最大值為,對應(yīng)索引為。確認(rèn)是否與相同。要使用,首先需要了解他主要兩個(gè)數(shù)據(jù)結(jié)構(gòu)和。

這一節(jié)繼續(xù)學(xué)習(xí)Numpy和Pandas。
一、numpy基礎(chǔ)運(yùn)算二

通過上一節(jié)的學(xué)習(xí),我們可以了解到一部分矩陣中元素的計(jì)算和查找操作。然而在日常使用中,對應(yīng)元素的索引也是非常重要的。依然,讓我們先從一個(gè)腳本開始 :

# -*- coding:utf-8 -*-

"""
@author: Corwien
@file: np_yunsuan.py
@time: 18/8/26 23:37
"""

import numpy as np
A = np.arange(2, 14).reshape(3, 4)
# array([[ 2, 3, 4, 5]
#        [ 6, 7, 8, 9]
#        [10,11,12,13]])
         
print(np.argmin(A))    # 0
print(np.argmax(A))    # 11
常用方法

其中的 argmin()argmax() 兩個(gè)函數(shù)分別對應(yīng)著求矩陣中最小元素和最大元素的索引。相應(yīng)的,在矩陣的12個(gè)元素中,最小值即2,對應(yīng)索引0,最大值為13,對應(yīng)索引為11。

如果需要計(jì)算統(tǒng)計(jì)中的均值,可以利用下面的方式,將整個(gè)矩陣的均值求出來:

print(np.mean(A))        # 7.5
print(np.average(A))     # 7.5

仿照著前一節(jié)中dot() 的使用法則,mean()函數(shù)還有另外一種寫法:

print(A.mean())          # 7.5

同樣的,我們可以寫出求解中位數(shù)的函數(shù):

print(A.median())       # 7.5

另外,和matlab中的cumsum()累加函數(shù)類似,Numpy中也具有cumsum()函數(shù),其用法如下:

print(np.cumsum(A)) 

# [2 5 9 14 20 27 35 44 54 65 77 90]

在cumsum()函數(shù)中:生成的每一項(xiàng)矩陣元素均是從原矩陣首項(xiàng)累加到對應(yīng)項(xiàng)的元素之和。比如元素9,在cumsum()生成的矩陣中序號為3,即原矩陣中2,3,4三個(gè)元素的和。

下面我們介紹一下nonzero()函數(shù):

print(np.nonzero(A))    

# (array([0,0,0,0,1,1,1,1,2,2,2,2]),array([0,1,2,3,0,1,2,3,0,1,2,3]))

這個(gè)函數(shù)將所有非零元素的行與列坐標(biāo)分割開,重構(gòu)成兩個(gè)分別關(guān)于行和列的矩陣。

索引 一維索引

在元素列表或者數(shù)組中,我們可以用如同a[2]一樣的表示方法,同樣的,在Numpy中也有相對應(yīng)的表示方法:

# -*- coding:utf-8 -*-

"""
@author: Corwien
@file: np_index.py
@time: 18/8/28 00:49
"""

import numpy as np
A = np.arange(3, 11)

print(A)    # [3 4 5 6 7 8 9 10]
print(A[3]) # 6

讓我們將矩陣轉(zhuǎn)換為二維的,此時(shí)進(jìn)行同樣的操作:

A = np.arange(3, 11).reshape(2, 4)

"""
[[ 3  4  5  6]
 [ 7  8  9 10]]
"""

print(A[1]) # [ 7  8  9 10]

實(shí)際上這時(shí)的A[1]對應(yīng)的就是矩陣A中第二行(從0開始算第一行)的所有元素。

二維索引

如果你想要表示具體的單個(gè)元素,可以仿照上述的例子:

print(A[1][1])      # 8

此時(shí)對應(yīng)的元素即A[1][1],在A中即橫縱坐標(biāo)都為1,第二行第二列的元素,即8(因?yàn)橛?jì)數(shù)從0開始)。同樣的還有其他的表示方法:

print(A[1, 1])      # 8

在Python的 list 中,我們可以利用:對一定范圍內(nèi)的元素進(jìn)行切片操作,在Numpy中我們依然可以給出相應(yīng)的方法:

print(A[1, 1:3])    # [8 9]

這一表示形式即針對第二行中第2到第4列元素進(jìn)行切片輸出(不包含第4列)。

此時(shí)我們適當(dāng)?shù)睦胒or函數(shù)進(jìn)行打印:

for row in A:
    print(row)
    
"""    
[ 3,  4,  5, 6]
[ 7,  8,  9, 10]
"""

此時(shí)它會逐行進(jìn)行打印操作。如果想進(jìn)行逐列打印,就需要稍稍變化一下:

for column in A.T:
    print(column)
"""  
[3 7]
[4 8]
[5 9]
[ 6 10]
"""

上述表示方法即對A進(jìn)行轉(zhuǎn)置,再將得到的矩陣逐行輸出即可得到原矩陣的逐列輸出。

最后依然說一些關(guān)于迭代輸出的問題:

import numpy as np
A = np.arange(3,15).reshape((3,4))
         
print(A.flatten())   
# array([3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])

for item in A.flat:
    print(item)
    
# 3
# 4
……
# 14

這一腳本中的flatten是一個(gè)展開性質(zhì)的函數(shù),將多維的矩陣進(jìn)行展開成1行的數(shù)列。而flat是一個(gè)迭代器,本身是一個(gè)object屬性。

合并

np.vstack() # vertical stack 上下合并

np.hstack() # horizontal stack 左右合并

np.newaxis() # 中轉(zhuǎn)置操作

np.concatenate() # 多個(gè)合并

分割 創(chuàng)建數(shù)據(jù)
# -*- coding:utf-8 -*-

"""
@author: Corwien
@file: np_split.py
@time: 18/8/28 01:21
"""

import numpy as np

A = np.arange(12).reshape((3, 4))
print(A)
"""
array([[ 0,  1,  2,  3],
    [ 4,  5,  6,  7],
    [ 8,  9, 10, 11]])
"""
   
縱向分割
print(np.split(A, 2, axis=1))
"""
[array([[0, 1],
        [4, 5],
        [8, 9]]), array([[ 2,  3],
        [ 6,  7],
        [10, 11]])]
"""
橫向分割
print(np.split(A, 3, axis=0))

# [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
錯(cuò)誤的分割

范例的Array只有4列,只能等量對分,因此輸入以上程序代碼后Python就會報(bào)錯(cuò)。

print(np.split(A, 3, axis=1))

# ValueError: array split does not result in an equal division

為了解決這種情況, 我們會有下面這種方式.

不等量的分割

在機(jī)器學(xué)習(xí)時(shí)經(jīng)常會需要將數(shù)據(jù)做不等量的分割,因此解決辦法為np.array_split()

print(np.array_split(A, 3, axis=1))
"""
[array([[0, 1],
        [4, 5],
        [8, 9]]), array([[ 2],
        [ 6],
        [10]]), array([[ 3],
        [ 7],
        [11]])]
"""

成功將Array不等量分割!

其他的分割方式

在numpy里還有np.vsplit()與橫np.hsplit()方式可用。

print(np.vsplit(A, 3)) #等于 print(np.split(A, 3, axis=0))

# [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]


print(np.hsplit(A, 2)) #等于 print(np.split(A, 2, axis=1))
"""
[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2,  3],
        [ 6,  7],
        [10, 11]])]
"""
copy & deep copy = 的賦值方式會帶有關(guān)聯(lián)性
import numpy as np

a = np.arange(4)
# array([0, 1, 2, 3])

b = a
c = a
d = b

改變a的第一個(gè)值,bcd的第一個(gè)值也會同時(shí)改變。

a[0] = 11
print(a)
# array([11,  1,  2,  3])

確認(rèn)b、c、d是否與a相同。

b is a  # True
c is a  # True
d is a  # True

同樣更改d的值,abc也會改變。

d[1:3] = [22, 33]   # array([11, 22, 33,  3])
print(a)            # array([11, 22, 33,  3])
print(b)            # array([11, 22, 33,  3])
print(c)            # array([11, 22, 33,  3])
copy() 的賦值方式?jīng)]有關(guān)聯(lián)性

deep copy 為深賦值,重新建了一個(gè)地址

b = a.copy()    # deep copy
print(b)        # array([11, 22, 33,  3])
a[3] = 44
print(a)        # array([11, 22, 33, 44])
print(b)        # array([11, 22, 33,  3])

此時(shí)ab已經(jīng)沒有關(guān)聯(lián)。

二、pandas基礎(chǔ) 1、Numpy和Pandas有什么不同

如果用 python 的列表和字典來作比較, 那么可以說 Numpy 是列表形式的,沒有數(shù)值標(biāo)簽,而 Pandas 就是字典形式。Pandas是基于Numpy構(gòu)建的,讓Numpy為中心的應(yīng)用變得更加簡單。

要使用pandas,首先需要了解他主要兩個(gè)數(shù)據(jù)結(jié)構(gòu):SeriesDataFrame

Series
# -*- coding:utf-8 -*-

"""
@author: Corwien
@file: pd_new.py
@time: 18/8/30 00:22
"""

import pandas as pd
import numpy as np

s = pd.Series([1, 3, 6, np.nan, 44, 1])

print s

結(jié)果打印:

/Users/corwien/anaconda2/bin/python /Users/corwien/Code/python/baseLearn/pandas/pd_new.py

0     1.0
1     3.0
2     6.0
3     NaN
4    44.0
5     1.0
dtype: float64

Series的字符串表現(xiàn)形式為:索引在左邊,值在右邊。由于我們沒有為數(shù)據(jù)指定索引。于是會自動(dòng)創(chuàng)建一個(gè)0到N-1(N為長度)的整數(shù)型索引。

DataFrame
dates = pd.date_range("20180830", periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=["A", "B", "C", "D"])

print(df)
"""
                   A         B         C         D
2018-08-30 -0.838769 -0.366117 -0.501002 -0.418720
2018-08-31  0.062155  1.467156  1.995968 -0.460316
2018-09-01  0.553028  0.144778  1.944617  1.709808
2018-09-02 -0.116423 -1.134185  1.231541  0.862480
2018-09-03 -0.823016  0.491625 -1.448212 -0.921488
2018-09-04 -0.226200  0.353459  0.219459  0.635181
"""

DataFrame是一個(gè)表格型的數(shù)據(jù)結(jié)構(gòu),它包含有一組有序的列,每列可以是不同的值類型(數(shù)值,字符串,布爾值等)。DataFrame既有行索引也有列索引, 它可以被看做由Series組成的大字典。

我們可以根據(jù)每一個(gè)不同的索引來挑選數(shù)據(jù), 比如挑選 B 的元素:

DataFrame 的一些簡單運(yùn)用
print(df["b"])

"""
2018-08-30    0.391123
2018-08-31   -0.508613
2018-09-01    1.618023
2018-09-02   -1.168342
2018-09-03   -0.915434
2018-09-04    0.595129
Freq: D, Name: B, dtype: float64
"""

我們在創(chuàng)建一組沒有給定行標(biāo)簽和列標(biāo)簽的數(shù)據(jù) df1:

df1 = pd.DataFrame(np.arange(12).reshape((3,4)))
print(df1)

"""
   0  1   2   3
0  0  1   2   3
1  4  5   6   7
2  8  9  10  11
"""

這樣,他就會采取默認(rèn)的從0開始 index. 還有一種生成 df 的方法, 如下 df2:

df2 = pd.DataFrame({"A" : 1.,
                    "B" : pd.Timestamp("20130102"),
                    "C" : pd.Series(1,index=list(range(4)),dtype="float32"),
                    "D" : np.array([3] * 4,dtype="int32"),
                    "E" : pd.Categorical(["test","train","test","train"]),
                    "F" : "foo"})
                    
print(df2)

"""
     A          B    C  D      E    F
0  1.0 2013-01-02  1.0  3   test  foo
1  1.0 2013-01-02  1.0  3  train  foo
2  1.0 2013-01-02  1.0  3   test  foo
3  1.0 2013-01-02  1.0  3  train  foo
"""

這種方法能對每一列的數(shù)據(jù)進(jìn)行特殊對待. 如果想要查看數(shù)據(jù)中的類型, 我們可以用 dtype 這個(gè)屬性:

print(df2.dtypes)

"""
df2.dtypes
A           float64
B    datetime64[ns]
C           float32
D             int32
E          category
F            object
dtype: object
"""

同樣, 每種數(shù)據(jù)的名稱也能看到:

print(df2.columns)
# Index(["A", "B", "C", "D", "E", "F"], dtype="object")

想知道數(shù)據(jù)的總結(jié), 可以用 describe():

df2.describe()

"""
         A    C    D
count  4.0  4.0  4.0
mean   1.0  1.0  3.0
std    0.0  0.0  0.0
min    1.0  1.0  3.0
25%    1.0  1.0  3.0
50%    1.0  1.0  3.0
75%    1.0  1.0  3.0
max    1.0  1.0  3.0
"""

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/42304.html

相關(guān)文章

  • python綜合學(xué)習(xí)三之NumpyPandas

    摘要:本章學(xué)習(xí)兩個(gè)科學(xué)運(yùn)算當(dāng)中最為重要的兩個(gè)模塊,一個(gè)是一個(gè)是。這種工具可用來存儲和處理大型矩陣,比自身的嵌套列表結(jié)構(gòu)要高效的多該結(jié)構(gòu)也可以用來表示矩陣。專為進(jìn)行嚴(yán)格的數(shù)字處理而產(chǎn)生。可以通過函數(shù)對相應(yīng)值進(jìn)行打印檢驗(yàn)。 本章學(xué)習(xí)兩個(gè)科學(xué)運(yùn)算當(dāng)中最為重要的兩個(gè)模塊,一個(gè)是 numpy,一個(gè)是 pandas。任何關(guān)于數(shù)據(jù)分析的模塊都少不了它們兩個(gè)。 一、numpy & pandas特點(diǎn) NumP...

    tinylcy 評論0 收藏0
  • Python機(jī)器學(xué)習(xí)入門資料整理

    摘要:在基本語法入門之后,就要準(zhǔn)備選一個(gè)研究方向了。是自己比較感興趣的方向,可是,導(dǎo)師這邊的數(shù)據(jù)處理肯定不能由我做主了。真的挺愁人的還有幾個(gè)月就要進(jìn)行春季實(shí)習(xí)招聘了,加油總結(jié)一下機(jī)器學(xué)習(xí)方面的資料吧。 在python基本語法入門之后,就要準(zhǔn)備選一個(gè)研究方向了。Web是自己比較感興趣的方向,可是,導(dǎo)師這邊的數(shù)據(jù)處理肯定不能由我做主了。paper、peper、paper……真的挺愁人的 還有幾個(gè)...

    Rango 評論0 收藏0
  • 【數(shù)據(jù)科學(xué)系統(tǒng)學(xué)習(xí)Python # 數(shù)據(jù)分析基本操作[二] pandas

    摘要:中面向行和面向列的操作基本是平衡的。用層次化索引,將其表示為更高維度的數(shù)據(jù)。使用浮點(diǎn)值表示浮點(diǎn)和非浮點(diǎn)數(shù)組中的缺失數(shù)據(jù)。索引的的格式化輸出形式選取數(shù)據(jù)子集在內(nèi)層中進(jìn)行選取層次化索引在數(shù)據(jù)重塑和基于分組的操作中很重要。 我們在上一篇介紹了 NumPy,本篇介紹 pandas。 pandas入門 Pandas 是基于Numpy構(gòu)建的,讓以NumPy為中心的應(yīng)用變的更加簡單。 pandas...

    jayzou 評論0 收藏0
  • python數(shù)學(xué)建模是加深NumpyPandas學(xué)習(xí)

      小編寫這篇文章的主要目的,主要是來給大家去做一個(gè)介紹的,介紹的內(nèi)容主要還是涉及到python的一些相關(guān)事情,比如我們可以利用python去進(jìn)行搭建數(shù)字建模的相關(guān)平臺。其中,主要的內(nèi)容有加深Numpy和Pandas的相關(guān)學(xué)習(xí),具體內(nèi)容,下面給大家詳細(xì)解答下。  Numpy學(xué)習(xí)  #Numpy的基本使用   '''   Numpy提供了兩種基本的對象:ndarray存儲單一...

    89542767 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<