python基礎

1.兩種方法創建二維數組 :
[ 10 11 12
20 21 22
30 31 32 ]
代碼:

#!/usr/bin/python

import numpy as np
import matplotlib as mlp
import matplotlib.pyplot as plt
if __name__ == '__main__':
    a = np.array([[10,11,12],[20,21,22],[30,31,32]])
    b = np.arange(10,40,10).reshape(-1,1)+np.arange(0,3,1)
    print a
    print b

解釋:其中 a,b分別代表了一種方法,a直接輸出其中的元素,b爲一個橫向量與一個列向量相加。
numpy中的array要比python原有的list()性能更好,且list中的元素不能爲浮點型,只能爲int型。

2.創造一個橫向量[2,3,4,5,6],改變其維度爲2行3列,查看向量的類型,查看向量中元素的類型,並且改變元素的類型。
代碼:

#!/usr/bin/python

import numpy as np
import matplotlib as mlt
import matplotlib.pyplot as plt

if __name__ == '__main__':
    a = np.arange(1,7,1)
    b = a.reshape(2,3)
    print a, type(a), a.dtype
    print b, type(b), b.dtype
    print b.astype(np.float).dtype

解釋:np.arange(1,7,1)爲步長爲1,從1到7生成6個數,即左閉右開,步長爲1從1到7生成一個數列。reshape(2,3)重新設定數組的維度。type()爲查看變量的類型。dtype爲數組中元素的類型。astype爲重新設定數組中元素的類型。

3.創建複數數組。
代碼:

#!/usr/bin/python

import numpy as np
import matplotlib as mlt
import matplotlib.pyplot as plt

if __name__ == '__main__':
    a = np.array([[0+0j], [1+1j], [2+2j], [3+3j]])
    print a, type(a), a.dtype

解釋:創建複數數組,注意0j不能寫成0*j。

4.對 2中的數組進行切片,且將其賦予另一個變量,並對其進行改變元素的操作。
代碼:

#!/usr/bin/python

import numpy as np
import matplotlib as mlt
import matplotlib.pyplot as plt

if __name__ == '__main__':
    a = np.arange(1,7,1)
    print a
    b = a[2:5]
    c = a[::-1]
    b[0] = 100
    print a
    print b
    print c

解釋:a[2:5]爲對數組a進行切片操作,取其中的2,3,4位(不包括5)的元素。改變b[0]的元素,發現a[2]的值也變爲 100,因爲a,b共享元素。a[::-1]爲從後向前輸出a數組。

5.在4中,採用兩種方法當改變b值時,a不變。
方法一,代碼:

#!/usr/bin/python

import numpy as np
import matplotlib as mlt
import matplotlib.pyplot as plt

if __name__ == '__main__':
    a = np.arange(1,7,1)
    print a
    b = a[2:5].copy()
    b[0] = 100
    print a
    print b

解釋:使用深度複製copy()。

方法2,代碼:

#!/usr/bin/python

import numpy as np
import matplotlib as mlt
import matplotlib.pyplot as plt

if __name__ == '__main__':
    a = np.arange(1,7,1)
    ind = np.linspace(2,5,4)
    ind = np.astype(np.int)
    #ind = np.arange(2,6,1)
    b = a[ind]
    b[0] = 100
    print a
    print b

解釋:當輸入序列號即index值時,a與b不共享空間。

6.numpy中和原始python一些方法速度的比較。
代碼:

#!/usr/bin/python

import numpy as np
import matplotlib as mlt
import matplotlib.pyplot as plt
import time
import math
if __name__ == '__main__':
    for nums in np.logspace(0,7,8,base=10):
        xx = np.linspace(0,10, nums)
        timeStart = time.clock()
        np.sin(xx)
        timeEndFirst =  time.clock() - timeStart

        xx = xx.tolist()
        timeStart = time.clock()
        for ind, text in enumerate(xx):
            xx[ind] = math.sin(text)
        timeEndSecond = time.clock() - timeStart

        print nums, ': ', timeEndFirst, timeEndSecond, timeEndFirst/timeEndSecond

解釋:np.logspace(0,7,8,base =10)爲以base=10爲底,生成8個指數,冪分別爲從0到7的8個數。np.linspace(0,10,nums)爲從0, 到10 把這個區間分爲nums份。logspace與linspace是閉區間,即0,到10都能取到,而arange爲左閉右開,右邊的值取不到。

7.生成20個隨機數範圍爲0~1不包括1,包括0。找出其中大與0.6的數。
代碼(生成隨機數):

#!/usr/bin/python

import numpy as np
import matplotlib as mlt
import matplotlib.pyplot as plt

if __name__ == '__main__':
    np.random.seed(0)
    a = np.random.rand(20)
    print a

解釋: seed()中爲種子,當seed()中有數時,產生的隨機數不變。沒數時一直是變的。
代碼(找到大於0.6的數):

#!bin/usr/python

import numpy as np
import matplotlib as mlt
import matplotlib.pyplot as plt

if __name__ == '__main__':
    np.random.seed()
    a = np.random.rand(20)
    print a
    b = a > 0.6
    print b, type(b)
    print a[b]

解釋:b爲一個布爾型的數組,可以當成數組的索引。

8.兩種方法對二維數組去重。
[1 2]
3 4
5 6
1 3
3 4
7 6]
即去除重複的[1 3]。
方法1(使用複數的索引),代碼:

#!/usr/bin/python

import numpy as np
import matplotlib as mlt
import matplotlib.pyplot as plt

if __name__ == '__main__':
    a = np.array([[1,2],[3,4],[5,6],[1,3],[3,4],[7,6]])
    print a
    b = a[:,0].reshape(-1,1)
    c = a[:,1].reshape(-1,1)
    d = b + c*1j
    ind = np.unique(d, return_index = True)[1]
    a = a[ind]
    print b
    print c
    print d
    print a

解釋:由原始二維數組的第一列與第二列構建一個複數數組,找到複數數組重複的元素。注意c*1j不能寫成c*j。

方法2,使用set()與tuple()。set無重複元素,tuple不能改變,且其是hashble的,因此可以當set中的元素。代碼:

#!/usr/bin/python

import numpy as np
import matplotlib as plt

if __name__ == '__main__':
    a = np.array([[1,2],[3,4],[5,6],[1,3],[3,4],[7,6]])
    print a
    #d = list()
    #for ii in list(set(tuple(t) for t in a)):
    #    d.append(list(ii))
    # print d
    b = np.array(list(set(tuple(t) for t in a)))
    print b

解釋:可以選擇對一個數組增加set中的元素值來去重。注意,不能直接寫b = np.array(list(set(t for t in a)))因爲t爲unhashble。註釋掉的部分爲將tuple轉化爲list元素的操作。

9.畫一個正太高斯分佈。
代碼:

#!/usr/bin/python

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import math
if __name__ == '__main__':
    mu = 0
    sigma = 1
    x = np.arange(-3,3,0.1)
    y = np.exp(-(x-mu)**2/(2*sigma**2))/math.sqrt(2*math.pi)*sigma
    plt.plot(x, y, 'r-', linewidth=2, label='Gaussian')
    plt.legend(loc = 'upper right')
    plt.xlabel('x', fontsize = 15)
    plt.ylabel('y', fontsize = 15)
    plt.grid(True)
    plt.show()

不解釋

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章