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 of positive integ程式設計客棧ers. in numpy dimensions are called axes. the number of axes is rank.
for example, the coordinates of a point in 3d space [1, 2, 1] is an array of rank 1, because it has one axis. that axis has a length of 3. in the example pictured below, the array has rank 2 (it is 2-dimensional). the first dimension (axis) has a length of 2, the second dimension has a length of 3.
[[ 1., 0., 0.],
[ 0., 1., 2.]]
ndarray.ndim
陣列軸的個數,在python的世界中,軸的個數被稱作秩
>> 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]]])
shape函式是numpy.core.fromnumeric中的函式,它的功能是讀取矩陣的長度,比如shape[0]就是讀取矩陣第一維度的長度。
shape(x)
(2,3,4)
shape(x)[0]
或者x.shape[0]
再來分別看每乙個平面的構成:
>> x[:, :, 0]
array([[ 0, 4, 8],
[12, 16, 20]])
>> x[:, :, 1www.cppcns.com]
array([[ 1, 5, 9],
[13, 17, 21]])
>> x[:, :, 2]
array([[ 2, 6, 10],
[14, 18, 22]])
>> x[:, :, 3]
array([[ 3, 7, 11],
[15, 19, 23]])
也即在對 np.arange(24)(0, 1, 2, 3, ..., 23) 進行重新的排列時,在多維陣列的多個軸的方向上,先分配最後乙個軸(對於二維陣列,即先分配行的方向,對於三維陣列即先分配平面的方向)
reshpae,是陣列物件中的方法,用於改變陣列的形狀。
二維陣列
#!/usr/bin/env python
# coding=utf-8
import numpy as np
a=np.array([1, 2, 3, 4, 5, 6, 7, 8])
print a
d=a.reshape((2,4))
print d
三維陣列
#!/usr/bin/env python
# coding=utf-8
import numpy as np
a=np.array([1, 2, 3, 4, 5, 6, 7, 8])
print a
f=a.reshape((2, 2, 2))
print f
形狀變化的原則是陣列元素不程式設計客棧能發生改變,比如這樣寫就是錯誤的,因為陣列元素發生了變化。
#!/usr/bin/env python
# coding=utf-8
import numpy as np
a=np.array([1, 2, 3, 4, 5, 6, 7, 8])
print a
print a.dtype
e=a.reshape((2,2))
print e
注意:通過reshape生成的新陣列和原始陣列公用乙個記憶體,也就是說,假如更改乙個陣列的元素,另乙個陣列也將發生改變。
#!/usr/bin/env python
# coding=utf-8
import numpy as np
a=np.array([1, 2, 3, 4, 5, 6, 7, 8])
print a
e=a.reshape((2, 4))
print e
a[1]=100
print a
print e
python中reshape函式引數-1的意思
a=np.arange(0, 60, 10)
>>>a
array([0,10,20,30,40,50])
>>>a.reshape(-1,1)
array([[0],
[10],
[20],
[30],
[40],
[50]])
如果寫成a.reshape(1,1)就程式設計客棧會報錯
valueerror:cannot reshape array of size 6 into shape (1,1)
>>> a = np.array([[1,2,3], [4,5,6]])
>>> np.reshape(a, (3,-1)) # the unspecified value is inferred to be 2
array([[1, 2],
[3, 4],
[5, 6]])
-1表示我懶得計算該填什麼數字,由python通過a和其他的值3推測出來。
# 下面是兩張2*3大小的**(不知道有幾張**用-1代替),如何把所有二維**給攤平成一維
>>> image = np.array([[[1,2,3], [4,5,6]], [[1,1,1], [1,1,1]]])
>>> image.shape
(2, 2, 3)
>>> image.reshape((-1, 6))
array([[1, 2, 3, 4, 5, 6],
[1, 1, 1, 1, 1, 1]])
本文標題: 對numpy中軸與維度的理解
本文位址:
numpy 維度與軸
albert chen albert chen 的個人部落格 發表於 2016 09 01 分類於程式語言 我知道 numpy 是多維陣列,但是一直不理解其軸 axis 的概念,以及基於軸之上的計算。今天寫了些例項終於理解了。首先是維度,對人來說高維空間是很難想象的,但是我們可以從純數學的角度來看。...
numpy中張量維度的簡單理解
接觸numpy不久,一直不太理解裡面的張量還有axis軸究竟是個什麼東西。貌似隨便給我乙個高維的張量都不能描述它的shape是什麼樣的。後來自己仔細研究了一下,有所收穫。首先,張量不同於向量或者矩陣。一維的張量是沒有行與列之分的。import numpy as np a 1,2 b 1 2 a np...
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 ...