numpy高级操作,求高维矩阵的距离矩阵(方阵)以及 求某一个维度的累加和 , 矩阵切片操作
生活随笔
收集整理的這篇文章主要介紹了
numpy高级操作,求高维矩阵的距离矩阵(方阵)以及 求某一个维度的累加和 , 矩阵切片操作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
例:我們有維度為[Batch_size,T,V,C] 的數據,想得到維度為[Batch_size,T,V,V]的數據:
方法:
def calculate_dis(x): #N,T,V,C#x = np.array(x)sum_x = np.sum(np.square(x),3,keepdims = True)#先求對應元素的平方,然后按列相加,得到(N,T,V,1)的矩陣#print(a.shape)dist = np.add(np.add(-2*np.matmul(x,x.swapaxes(2,3)),sum_x),sum_x.swapaxes(2,3))#np.matmull()函數可以求矩陣指定維度內積,這里x = np.add()函數是將sum_x的轉置行向量依次加到前面的(N,T,V,V)向量的每一行上。#這里x,x.swapaxes維度分別為[N,T,V,C] 和 [N,T,C,V]return dist這里我們主要用到:np.square(x);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? np.sum(x,dims,keepdims);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? np.add(x,y) #將y轉置加到x的每一行上,對y維度有要求
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? np.matmul(x,y) #求x,y內積
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? x.swapaxes(a,b) # 將x的a,b維度交換位置。
?
例:我們有維度為[Batch_size,T,V,C] 的數據,想沿T維度求相鄰項的內積之和。
def attention_matrix(x,N,T,V,fps):dis_ = 0for k in range(T//fps + 1):#print(k)index_start = (k * fps if k is 0 else (k * fps - 1) ) index_end = (k+1) * fps - 1if k == T//fps:dis_ += np.sum(np.square(x[:,index_start,:,:] - x[:,-1,:,:]),2) #[N,V]else:dis = np.sum(np.square(x[:,index_start,:,:] - x[:,index_end,:,:]),2)dis_ += disattention_m = np.zeros([N,V,V])#將列向量擴展為對角線元素維向量元素的方陣for i in range (V): attention_m[:,i,i] = dis[:,i] return attention_m這里我們主要搞清楚如何設置array的索引即可!!
注意:選取高維數據的某一維時應該用 ',? N? ,' 來操作:
例a 尺寸為 [100,25,7,7]
想依次獲取第二維度所代表的所有數據[100,7,7]
就這樣操作:
for i in range (25):
? ? ?b[i]? =? a[:,i,:,:]
?
總結
以上是生活随笔為你收集整理的numpy高级操作,求高维矩阵的距离矩阵(方阵)以及 求某一个维度的累加和 , 矩阵切片操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 参数形参错误之 SyntaxError:
- 下一篇: 运行时报错RuntimeError: e