基本思想:對python而言,都繞不開numpy,逐決定以原始碼為導向,學習numpy的使用;首先引入乙個numpy的導向圖,記住其矩陣的1維、2維、3維形式;
修改了它人的原始碼,簡單分析一下
import numpy as np
x = np.array([[0,1,2,3],[4,5,6,7],[8,9,10,11],[12,13,14,15]])
print(x[1,0]) #參考上圖第二個圖,先取垂直軸的(第0行[0,1,2,3])第1行[4,5,6,7] 然後在取水平軸的第0列位置元素4
print(x[1:3,1:3]) #參考上圖第二個圖,先取垂直軸的第1-2行[[4,5,6,7],[8,9,10,11]] 然後在取水平軸的第1-2列位置元素[[5 6],[9 10]]
print(x[:2,:2])#參考上圖第二個圖,先取垂直軸的第0-1行[[0,1,2,3],[4,5,6,7]] 然後在取水平軸的第1-2列位置元素[[0 1],[4 5]]
print(x[:,:2])#參考上圖第二個圖,先取垂直軸的所有行[[0,1,2,3],[4,5,6,7],[8,9,10,11],[12,13,14,15]]然後在取水平軸的第0-1列位置元素[[0 1],[4 5],[8 9],[12 13]]
print(x[:,0])#參考上圖第二個圖,先取垂直軸的所有行[[0,1,2,3],[4,5,6,7],[8,9,10,11],[12,13,14,15]]然後在取水平軸的第0-1列位置元素[0 4 8 12 ]
#可以窺見一斑,[0維(垂直軸),1維(水平軸)]
4
[[ 5 6]
[ 9 10]]
[[0 1]
[4 5]]
[[ 0 1]
[ 4 5]
[ 8 9]
[12 13]]
[ 0 4 8 12]
同樣的維度空間運算還有
import numpy as np
x = np.array([[0,1,2,3],[4,5,6,7],[8,9,10,11],[12,13,14,15]])
y= np.eye(4,dtype=int,k=0)
z=np.concatenate((x,y),axis=0)
print(z)
z=np.concatenate((x,y),axis=1)
print(z)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]
[ 1 0 0 0]
[ 0 1 0 0]
[ 0 0 1 0]
[ 0 0 0 1]]
[[ 0 1 2 3 1 0 0 0]
[ 4 5 6 7 0 1 0 0]
[ 8 9 10 11 0 0 1 0]
[12 13 14 15 0 0 0 1]]
process finished with exit code 0
np.maximum(x, y, out=none)
x和y逐位進行比較,選擇最大值.
最少接受兩個引數
記錄一下numpy的nms去重的基本演算法邏輯:
import numpy as np
def non_max_suppression(boxes, max_bbox_overlap, scores=none):
if len(boxes) == 0:
return
boxes = boxes.astype(np.float)
pick =
x1 = boxes[:, 0]
y1 = boxes[:, 1]
x2 = boxes[:, 2]
y2 = boxes[:, 3]
area = (x2 - x1 + 1) * (y2 - y1 + 1) #計算各個檢測框的面積
if scores is not none:
idxs = np.argsort(scores) #將面積大小的分數進行排序,輸出索引
else:
idxs = np.argsort(y2)
while len(idxs) > 0:
last = len(idxs) - 1
i = idxs[last]
xx1 = np.maximum(x1[i], x1[idxs[:last]]) #繪圖比較直觀觀察
yy1 = np.maximum(y1[i], y1[idxs[:last]])
xx2 = np.minimum(x2[i], x2[idxs[:last]])
yy2 = np.minimum(y2[i], y2[idxs[:last]])
w = np.maximum(0, xx2 - xx1 + 1)
h = np.maximum(0, yy2 - yy1 + 1)
overlap = (w * h) / area[idxs[:last]]
idxs = np.delete(idxs, np.concatenate(([last], np.where(overlap > max_bbox_overlap)[0])))
return pick
boxes =np.asarray([[ 97,545, 179,784], [99,401, 178,640], [ 546,146,625,385 ]]) #xmin ymin xmax,ymax
scores = np.asarray([3.16,3.1112,2.686])
indices = non_max_suppression(boxes, 0.3, scores)
boxes = [list(boxes[i]) for i in indices]
scores = [scores[i] for i in indices]
print(boxes,scores)
print(np.maximum(0,[1,2,3]))
print( np.where(np.array([23])>4)[0])
print(np.concatenate(([2],np.where(np.array([23])>4)[0])))
print(np.delete([3,4,2,5],np.concatenate(([2],np.where(np.array([23])>4)[0]))))
使用numpy對矩陣進行運算
如下 encoding utf 8 importnumpyasnp fromnumpy.linalgimportinv fromnumpyimportdot fromnumpyimportmat a np.mat 1,1 建立乙個一行一列的矩陣 print a矩陣為 n a print a矩陣的轉置...
使用Numpy進行one hot編碼
在實現很多機器學習任務的時候,經常需要將labels進行one hot encoding,具體思想這裡就不詳述,借一張圖來表示 numpy實現可以是這樣 函式需不需要返回轉置要根據具體情況看 如果不轉置每個label返回的就是乙個行向量 這裡轉置了,每個label就是對應的列向量 def conve...
Python 謹慎使用python進行矩陣計算
矩陣乘法 左乘 設a為m p的矩陣,b為p n的矩陣,那麼稱m n的矩陣c為矩陣a與b的乘積,記作c ab,稱為a左乘以b。左乘是做行變換 用對角陣左乘乙個矩陣,就是用對角陣的對角元分別乘這個矩陣的對應各行 右乘 設a為m p的矩陣,b為p n的矩陣,那麼度稱m n的矩陣c為矩陣a與b的乘積,記作版...