原文:
轉置可以對陣列進行重置,返回的是源資料的檢視(不會進行任何複製操作)。
轉置有三種方式,transpose
方法、t
屬性以及swapaxes
方法。in [
1]:
import numpy
as np
in [2]: arr = np.arange(20).reshape(4,5)#生成乙個4行5列的陣列
in [3]: arr
out[3]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
in [4]: arr.t #求轉置
out[4]:
array([[ 0, 5, 10, 15],
[ 1, 6, 11, 16],
[ 2, 7, 12, 17],
[ 3, 8, 13, 18],
[ 4, 9, 14, 19]])
對於高維陣列,transpose需要用到乙個由軸編號組成的元組,才能進行轉置。
這裡,著實好好理解了一下。開始的時候怎麼都想不明白。因為他跟矩陣轉置理解起來不太一樣。
主要參考:
abstractsky的部落格
albert chen
經管之家
對多維陣列來說,確定最底層的乙個基本元素位置需要用到的索引個數即是維度。這句話的理解可以結合我索引和切片的那篇文章理解。
我是這樣的理解的,比如說三維的陣列,那就對維度進行編號,也就是0,1,2。這樣說可能比較抽象。這裡的0,1,2可以理解為對shape
返回元組的索引。
比如: in [
59]: arr1 = np.arange(
12).reshape(
2,2,
3) in [60]: arr1
out[60]:
array([[[ 0, 1, 2],
[ 3, 4, 5]],
[[ 6, 7, 8],
[ 9, 10, 11]]])
in [61]: arr1.shape #看形狀
out[61]: (2, 2, 3) #說明這是乙個223的陣列(矩陣),返回的是乙個元組,可以對元組進行索引,也就是0,1,2 形狀
索引202
132
所以說,transpose
引數的真正意義在於這個shape
元組的索引。
那麼它的轉置就應該是
in [62]: arr1.transpose((1,0,2))
out[62]:
array([[[ 0, 1, 2],
[ 6, 7, 8]],
[[ 3, 4, 5],
[ 9, 10, 11]]])
比如,數值6開始的索引是[1,0,0]
,變換後變成了[0,1,0]
。
這也說明了,transpose
依賴於shape
。
但是,對於為什麼轉置最後乙個索引是不動的,頗為不解。陣列或者說矩陣的這塊有點太抽象了。雖然我線代成績不錯,但是這玩意不太一樣啊。
雖然還有點不解的地方,但是,理解了上方那部分之後,swapaxes
方法也就很好理解了。它接受一對軸編號。進行軸對換。其實也就是shape
引數。
in [
67]: arr2 = np.arange(
16).reshape(
2,2,
4)in [
68]: arr2 out[
68]: array([[[
0, 1,
2, 3], [
4, 5,
6, 7]], [[
8, 9,
10,
11], [
12,
13,
14,
15]]]) in [
69]: arr2.shape out[
69]: (
2, 2,
4) in [
70]: arr2.swapaxes(
1,2) out[
70]: array([[[
0, 4], [
1, 5], [
2, 6], [
3, 7]], [[
8, 12], [
9, 13], [
10,
14], [
11,
15]]]) in [
4]: arr2.swapaxes(
1,0)
#轉置,對比transpose(1,0,2) out[
4]: array([[[
0, 1,
2, 3], [
8, 9,
10,
11]], [[
4, 5,
6, 7], [
12,
13,
14,
15]]])
高維陣列的轉置使用permute函式
具體呼叫語法
b = permute(a,order)
按照向量order指定的順序重排a的各維。b中元素和a中元素完全相同。但由於經過重新排列,在a、b訪問同乙個元素使用的下標就不一樣了。order中的元素必須各不相同。
例子:
a=rand(4,5,6);size(a)
ans =
4 5 6
b = permute(a,[2 1 3]);size(b)
ans =
5 4 6
原來a是4x5x6的矩陣
按照順序[2 1 3]轉置之後,原來的第一,第二維順序改變
b的大小是5x4x6
高數 高數B模擬試卷
高數b 模擬試卷 一 選擇題 滿分20分 本大題共有5個小題,每小題4分,在每小題給出的四個選型中,只有一項符合題目要求,把所選項前的字母填在題目後的括號內.1.設 f x x0 sintdt 則f f 2 a.1b.1c.cos1d.1 cos1.2.limx 0x2sin1x sinx a.1b...
數數(高維DP)
fadbec 很善於數數,如他會數將 a 個紅球,b 個黃球,c 個藍球,d 個綠球排成 列,任意相鄰不同 的數 現在 r 君不知道 fadbec 數的對不對,想讓你也算 算。由於數字 較 所以請輸出除以 109 7 的餘數。四個正整數 a,b,c,d。輸出包含 個整數,表 答案。1 1 1 2 對...
高維字首和
給定 num 個三元組 x,y,z 每次詢問滿足 x leq qx y leq qy z leq qz 的三元組個數。x,y,z leq n n leq 10 q num leq 10 6 容易想到維護 pre x,y,z 表示 x leq x y leq y z leq z 的三元組個數 思路1利...