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()
不解釋