NumPy的基本使用

什麼是NumPy

NumPy是高性能的科學計算和數據分析基礎包

導入

import numpy as np

多維數組ndarray

創建一維數組

data = [1, 2, 3, 4]
arr = np.array(data)
print(arr)

[1 2 3 4]

創建多維數組

data = [1, 2, 3, 4]
data1 = [data, data]
arr = np.array(data1)
print(arr)

[[1 2 3 4]
[1 2 3 4]]

快速初始化創建數組

全0數組

data = np.zeros((2, 4))
print(data)
[[ 0.  0.  0.  0.]
[ 0.  0.  0.  0.]]

全1數組

data = np.ones((2, 4))
print(data)
[[ 1.  1.  1.  1.]
[ 1.  1.  1.  1.]]

等差數列

方法一

data = np.arange(1, 10, 2)    #1-10之間獲取差爲2的等差數列,不包含 終止值(10)
print(data)
[1 3 5 7 9]

方法二

data = np.linspace(1, 10, 6)    #1-10之間獲取6個元素,它們構成的等差數列,默認包含終止值(10)
print(data)
[  1.    2.8   4.6   6.4   8.2  10. ]

數組類型

常用的類型有float,int,bool,string,unicode

arr_int = np.array([1, 2, 3])
arr_float = np.array([1.1, 2, 3])
arr_unicode = np.array(['北京', '天津11'])
print(arr_int.dtype, arr_float.dtype, arr_unicode.dtype)
int32 float64 <U4

類型互轉

arr_int = np.array([1, 2, 3])
arr_float = np.array([1.1, 2, 3])
arr_int_to_float = arr_int.astype(np.float64)
arr_float_to_int = arr_float.astype(np.int32)
print(arr_int_to_float,arr_float_to_int)
[ 1.  2.  3.] [1 2 3]   # 注:float轉int後小數點會消失

數組的存儲類型和如何存儲的詳細可以參考: https://blog.csdn.net/pipisorry/article/details/39215089#commentBox

數據索引和切片

獲取第2行數據

data[1]
[4 5 6]

獲取第2列數據

data[:,1]
[2 5 8]

獲取第1行第2列數據

data[0,1]
2

獲取前兩行數據

data[:2]
[[1 2 3]
[4 5 6]]

獲取第一列以後的數據

data[:,1:]
[[2 3]
[5 6]
[8 9]]

獲取倒數兩行數據

data[-2:]
[[4 5 6]
[7 8 9]]

數組賦值

對第二行和第二列內的元素統一賦值成0

data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
data[:2,:2] = 0
print(data)
[[0 0 3]
[0 0 6]
[7 8 9]]

若不想改變源數組的值,可以使用copy進行賦值,涉及到淺拷貝和深拷貝的區別參考 https://www.cnblogs.com/xiaxiaoxu/p/9742452.html

以上簡單分片的示例,詳細可以參考 https://www.jianshu.com/p/15715d6f4dad

基本運算

相加

arr1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arr2 = np.array([[2, 2, 2], [3, 3, 3], [4, 4, 4]])
arr = arr1+arr2
print(arr)
[[ 3  4  5]
[ 7  8  9]
[11 12 13]]

相乘

arr1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arr2 = np.array([[2, 2, 2], [3, 3, 3], [4, 4, 4]])
arr = arr1*arr2
print(arr)
[[ 2  4  6]
[12 15 18]
[28 32 36]]

數值乘

arr1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arr = arr1*10
print(arr)
[[10 20 30]
[40 50 60]
[70 80 90]]

根號

arr1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arr = arr1**0.5
print(arr)
[[ 1.          1.41421356  1.73205081]
[ 2.          2.23606798  2.44948974]
[ 2.64575131  2.82842712  3.        ]]

常用的統計函數見下表

隨機數

示例

import numpy.random as npr
import matplotlib.pyplot as plt


size = 1000
rn1 = npr.rand(size, 2)
rn2 = npr.randn(size)
rn3 = npr.randint(0, 10, size)
rang = [0, 1, 2, 3, 4, 5]
rn4 = npr.choice(rang, size=size)
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2, figsize=(10, 10))
ax1.hist(rn1, bins=25, stacked=True)
ax1.set_title('rand')
ax1.set_ylabel('frequency')
ax1.grid(True)


ax2.hist(rn2, bins=25, stacked=True)
ax2.set_title('randn')
ax2.grid(True)


ax3.hist(rn3, bins=25, stacked=True)
ax3.set_title('randint')
ax3.set_ylabel('frequency')
ax3.grid(True)


ax4.hist(rn4, bins=25, stacked=True)
ax4.set_title('choice')
ax4.grid(True)
plt.show()

 

 

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