1.ndarray數組維度-橫向量和列向量
a = array([1,2,3]) #一維列向量
print(a.shape, a)
b = array([[1,2,3]]) #二維橫向量
print(b.shape, b)
(3,) [1 2 3]
(1, 3) [[1 2 3]]
{關於numpy數組維度表示上的區別,numpy多維數組橫向量和列向量的區別}
zeros([5,]) #返回的是一維列向量
[ 0. 0. 0. 0. 0.]
#等價於這樣的矩陣(一維數組),zeros([5])、zeros(5)以及zeros(5,)
zeros([5, 1]) #返回的是二維列向量
[[ 0.]
[ 0.]
[ 0.]
[ 0.]
[ 0.]]
zeros([1, 5]) #二維橫向量
[[ 0. 0. 0. 0. 0.]]
a = array([1,2,3]) #一維列向量
print(a.shape, a)
b = array([[1,2,3]]) #二維橫向量
print(b.shape, b)
(3,) [1 2 3]
(1, 3) [[1 2 3]]
Note:a=np.array([1,2,3]) 由 a.shape知道a是一個列向量,而b=np.array([[1,2,3]])是一個橫向量。
b=arange(1,5) #列向量
print(b.shape, b)
a=array([[1,2,3,4]])#橫向量
print(a.shape, a)
print(a+b)
(4,) [1 2 3 4]
(1, 4) [[1 2 3 4]]
[[2 4 6 8]]
Note:
1. 上面的例子沒有說明的,數值就是原來的,沒有變。比較上面知道,基本上橫向量和列向量是可以任意加減的。但是其他的要有一樣的shape纔可以。
2.一維列向量的轉置還是本身。
3. 一維列向量(如(3,))在廣播運算中是當做二維行向量(如(1,3))計算的。也就是說(3,)相當於(1,3)。
2.array元素存取
元素存取的不同方式
下標範圍存取元素
結束索引在這兒是不被包含的!和python中的list的索引相同!但是不同於pandas中的索引是被包含的!!!
數組元素的存取方法和Python的標準方法相同:
>>> a = np.arange(10)
>>> a[5] # 用整數作爲下標可以獲取數組中的某個元素
5
>>> a[3:5] # 用範圍作爲下標獲取數組的一個切片,包括a[3]不包括a[5]
array([3, 4])
>>> a[:5] # 省略開始下標,表示從a[0]開始
array([0, 1, 2, 3, 4])
>>> a[:-1] # 下標可以使用負數,表示從數組後往前數
array([0, 1, 2, 3, 4, 5, 6, 7, 8])
>>> a[2:4] = 100,101 # 下標還可以用來修改元素的值
>>> a
array([ 0, 1, 100, 101, 4, 5, 6, 7, 8, 9])
>>> a[1:-1:2] # 範圍中的第三個參數表示步長,2表示隔一個元素取一個元素
array([ 1, 101, 5, 7])
>>> a[::-1] # 省略範圍的開始下標和結束下標,步長爲-1,整個數組頭尾顛倒
array([ 9, 8, 7, 6, 5, 4, 101, 100, 1, 0])
>>> a[5:1:-2] # 步長爲負數時,開始下標必須大於結束下標
array([ 5, 101])
numpy數組下標是可以越界的!
b
array([1, 2, 3, 4, 5, 6])
b[1:30309]
array([2, 3, 4, 5, 6])
如果越界了,會自動檢測,只返回到結尾的數據。
和Python的列表序列不同,通過下標範圍獲取的新的數組是原始數組的一個視圖,它與原始數組共享同一塊數據空間。
>>> b = a[3:7] # 通過下標範圍產生一個新的數組b,b和a共享同一塊數據空間
>>> b
array([101, 4, 5, 6])
>>> b[2] = -10 # 將b的第2個元素修改爲-10
>>> b
array([101, 4, -10, 6])
>>> a # a的第5個元素也被修改爲10
array([ 0, 1, 100, 101, 4, -10, 6, 7, 8, 9])
除了使用下標範圍存取元素之外,NumPy還提供了兩種存取元素的高級方法。
3.使用整數序列
當使用整數序列對數組元素進行存取時,將使用整數序列中的每個元素作爲下標,整數序列可以是列表或者數組。使用整數序列作爲下標獲得的數組不和原始數組共享數據空間。
>>> x = np.arange(10,1,-1)
>>> x
array([10, 9, 8, 7, 6, 5, 4, 3, 2])
>>> x[[3, 3, 1, 8]] # 獲取x中的下標爲3, 3, 1, 8的4個元素,組成一個新的數組;python自帶的list不能這麼做
array([7, 7, 9, 2])
>>> b = x[np.array([3,3,-3,8])] #下標可以是負數
>>> b[2] = 100
>>> b
array([7, 7, 100, 2])
>>> x # 由於b和x不共享數據空間,因此x中的值並沒有改變
array([10, 9, 8, 7, 6, 5, 4, 3, 2])
>>> x[[3,5,1]] = -1, -2, -3 # 整數序列下標也可以用來修改元素的值
>>> x
array([10, -3, 8, -1, 6, -2, 4, 3, 2])