對numpy中軸與維度的理解

2022-09-28 12:00:09 字數 3312 閱讀 1721

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 ...