Python學習:numpy的使用技巧和注意
阿新 • • 發佈:2018-12-31
在實際操作中,我們需要需要養成習慣,任何浪費空間或者時間的操作都需要減少,因為我們操作的是大資料,可能造成災難性的放大,使用numpy的思想,儘量減少不必要的拷貝,我們操作的物件是大資料。
# -*- coding: utf-8 -*-
# numpy是針對list操作的
import numpy as np
# 定義一個一維3個的陣列
x = np.array([1,2,3])
print(x)
#%%
# 切片索引
x1 = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(x1)
print(x1[:,0])
#%%
# 建立0-1之間的隨機矩陣
x2 = np.random.random((3,3,3))
print(x2)
#%%
print(x2[:,:,0])
#%%
# 特別需要注意切片使用
x2[:,:,0] =0
print(x2[:,:,0])
print(x2)
#%%
print(x1)
# 對第一個axis取平均值
print(np.average(x1,axis=0))
# 對第一個axis取平均值
print(np.average(x1,axis=1))
# 需要理解axis的含義,對應的是那個緯度的平均值,就是把對應的緯度壓縮成1
#%%
# 將陣列向量化,使用numpy計算
import time
x = np. random.random((1000,1000))
ans =np.zeros((1000,1000))
# 遍歷矩陣,列舉矩陣每一行,再次列舉每一行裡面的每一個元素
t = time.time()
for i,row in enumerate(x):
for j,elem in enumerate(row):
ans[i][j] = elem +1
print(time.time()-t)
# 使用矩陣相加
t = time.time()
ans = x+1
print(time.time()-t)
# 使用np.add計算,比第二種方法要快40倍,第一種600倍,我的這臺計算機
t = time. time()
np.add(x,1,ans)
print(time.time()-t)
#0.5762310028076172
#0.04102921485900879
#0.001998424530029297
#%%
# numpy的廣播,broadcasting
x = np.array([1,2,3])
y = np.array([[1,1,1],[2,2,2],[3,3,3]])
z = y-x
print(z)
print(end ='\n')
# 直接使用broadcasting實現
x =y = np.array([1,2,3])
y = np.tile(y,[3,1]).T
z = y-x
print(z)
print(end ='\n')
# 間接使用,不能直接使用y.T,只有使用y[:,None]
x =y = np.array([1,2,3])
t = y[:,None]
print(t)
z = t -x
print(z)
print(end ='\n')
# 使用numpy的思想,儘量減少不必要的拷貝,我們操作的物件是大資料