albert chen
albert chen 的個人部落格
發表於 2016-09-01
|
分類於程式語言
|
我知道 numpy 是多維陣列,但是一直不理解其軸 axis 的概念,以及基於軸之上的計算。今天寫了些例項終於理解了。
首先是維度,對人來說高維空間是很難想象的,但是我們可以從純數學的角度來看。對多維陣列來說,確定最底層的乙個基本元素位置需要用到的索引個數即是維度。
比如說:
12
array([[要獲取 1 的值,我們需要使用1,2],
[ 3,
4]])
a[0][0]
, 一共用到了兩個座標索引,所以這個陣列的維度是2維,直觀的說陣列的維度就是所有基本元素左邊[
個數的最大值。
而每個座標索引可取的值是有範圍的,比如這裡兩個索引都只能取 0 和 1。維度與座標值範圍就組成了多維陣列的shape
屬性,它是乙個元組,長度代表了維度,而元組的每乙個值代表了乙個座標索引可取的值個數,所以將shape
的所有值乘起來就可以算出多維陣列元素的個數。
對一般的多維陣列來說基本元素即是數字,但數字不一定是基本元素,下邊接著說。
12
3
4
5
6
7
8
9
10
>>> a = array([[兩次建立,一次失敗,一次成功,注意到成功的那個多維陣列中1,[1,
2]],[
3,4]])
traceback (most recent call last):
file
"", line
1, in
valueerror: setting an array element
with a sequence.
>>> a = array([[[
1,2],
1],[
3,4]])
>>> a
array([[[
1, 2],
1],[ 3,
4]], dtype=object)
>>> a.shape
( 2,
2)
dtype=object
而且shape
是(2,2)
,所以實際上[1,2]
這個list是被當做多維陣列的基本元素的。
至於兩次結果不同的原因還不明確,與多維陣列的建立過程有關,待確認。
終於來到比較難懂的軸了,先從座標軸說起。
n 維空間裡有 n 個座標軸,並且座標軸互相垂直,每乙個點相對於一條座標軸都有唯一的乙個座標值。對同一條座標軸來說,座標值相同的點在同乙個 n-1 維的「平面」上。任意取乙個「平面」,我們就能定義「同乙個座標軸上的點」,這些點在「平面」上的投影相同,同乙個座標軸上的點組成的線是與座標軸平行的。而所謂的延軸計算實際上是降維的過程,同乙個座標軸上的點合併成乙個點,這樣n維空間就變成了 n-1 維空間。
具體到 numpy 中的多維陣列來說,軸即是元素座標的索引。比如,第0軸即是第1個索引,延0軸計算就是去掉座標中的第乙個索引。過程就是
遍歷其他索引的所有可能組合
取出乙個組合,保持值不變,遍歷第乙個索引所有可能值
根據索引可以獲得了同乙個軸上的所有元素
對他們進行計算得到最後的元素
所有組合的最後結果組到一起就是最後的 n-1 維陣列
所以如果乙個多維陣列的 shape 是 (a1, a2, a3, a4), 那麼延軸0計算最後的陣列shape 是 (a2, a3, a4), 延軸1計算最後的陣列shape是 (a1, a3, a4)
示例:
12
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
>>> a = array([[[numpy 的列印結果規則是:1,1],[
2,1],[
3,1]],[[
4,1],[
5,1],[
6,1]],[[
7,1],[
8,1],[
9,1]]])
>>> a.shape
( 3,
3, 2)
>>> a
array([[[
1, 1],
[ 2,
1],[ 3,
1]],
[[ 4,
1],[ 5,
1],[ 6,
1]],
[[ 7,
1],[ 8,
1],[ 9,
1]]])
>>> sum(a, axis=
0)array([[
12,
3],[ 15,
3],[ 18,
3]])
>>> sum(a, axis=
1)array([[
6,
3],[ 15,
3],[ 24,
3]])
>>> sum(a, axis=
2)array([[
2,
3,
4],[ 5,
6,
7],[ 8,
9, 10]])
最後的軸從左往右列印, 所以「列數」是 shape[-1]
次後的軸從頂向下列印,所以未分割的塊行數是 shape[-2]
剩下的軸從頂向下,每個切片通過乙個空行與下乙個隔開,所以整個的輸出結果可以分成shap[0]塊,然後每一塊又能分成 shape[1]塊
#python
#numpy
#axis
powerdesigner code name comment 互換
物件導向面向卿,不負**不負君。
31日誌 4分類
25標籤
1.維度
2.基本元素3.軸
4.補充
2017
albert chen
由 hexo 強力驅動
主題 -
next.mist
numpy 維度與軸的問題
x np.reshape np.arange 24 2,3,4 也即 2 行 3 列的 4 個平面 plane x array 0,1,2,3 4,5,6,7 8,9,10,11 12,13,14,15 16,17,18,19 20,21,22,23 再來分別看每乙個平面的構成 x 0 array ...
對numpy中軸與維度的理解
numpy s main object is the homogeneous multidimensional arr程式設計客棧ay.it is a table of elements usually numbers all of the same type,indexed by a tuple ...
numpy 軸的理解
在numpy中關於axis的軸有時會有點暈,這裡做下總結 如果axis 0,表示0軸,第乙個維度 axis 1,表示1軸,第二個維度 有點抽象 本地使用jupyter,設沒注釋的為 輸入,注釋部分為輸出 二維 import numpy as np a np.array 1,2,3 4,5,6 a a...