目錄
1.降維函數ravel()和flatten
ravel():
flatten():
2.矩陣存儲與內存結構
3.修改矩陣形狀的方法
4.特殊矩陣創建
全零矩陣: 如np.zeros(5)?創建含5個零的一維數組,輸出中零后的點(如?0.)表示浮點數類型。
全一矩陣:如np.ones(5)創建含5個1的一維數組
?編輯
矩陣中填充指定數據
對角線為1的矩陣
5.序列生成函數
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
6.一維數組元素的選取和修改
7.二維數組元素的選取和修改
8.三維矩陣元素的選取和修改
1.降維函數ravel()和flatten
ravel():
將高維數據轉換為一維,返回原始數據的視圖(內存共享),僅改變展示形式(如三維→一維)。
示例:V.ravel() 生成一維數組 r2,與原數據 V 共享內存。
import numpy as np
list1=[1,2,3,4,5,6,7,8]
v=np.array(list1)
v=v.reshape(2,2,2)
r2=v.ravel()
print(r2)#[1,2,3,4,5,6,7,8]
flatten():
同樣降維為一維,但返回元數組的副本(內存獨立),修改副本不影響原數據。
示例:V.flatten() 生成 r3,與原數據 V 無關聯。
核心區別: ravel 不創建副本,flatten 創建副本(獨立內存)。
????????
import numpy as np
list1=[1,2,3,4,5,6,7,8]
v=np.array(list1)
v=v.reshape(2,2,2)
r3=v.flatten()#非常重要
print(r3)#[1,2,3,4,5,6,7,8]
2.矩陣存儲與內存結構
矩陣數據在內存中以鏈式結構存儲(非連續塊),按需分配空間,避免內存浪費。
矩陣的“展示形式”(如 2×2)僅為邏輯視圖,實際存儲通過指針鏈接分散的內存區域。
3.修改矩陣形狀的方法
shape 屬性: 直接修改(如 V.shape = (2,4))可調整維度結構。
其他方法: reshape、ravel、flatten 均可實現升維/降維
list1=[1,2,3,4,5,6,7,8]
v=np.array(list1)
v.shape=(2,4)
print(v)
#[[1,2,3,4],[5,6,7,8]]
4.特殊矩陣創建
np.zeros():創建全零矩陣,默認浮點類型。
np.ones():創建全一矩陣,類似 np.zeros() 用法。
np.full():填充指定值(如 np.full((2, 2), 5) 生成全為 5 的矩陣)。
np.eye():生成單位矩陣(主對角線為 1,如 np.eye(5, 5))。
-
全零矩陣: 如
np.zeros(5)
?創建含5個零的一維數組,輸出中零后的點(如?0.
)表示浮點數類型。import numpy as np #創建全為0的數組 a=np.zeros(5) b=np.zeros((2,2))#只能接受一個參數 c=np.zeros((3,2,2)) print(a,'\n',b,'\n',c)
-
注意:函數接收單個參數時,若需傳遞多值(如矩陣維度),需將值包裝為元組(如 (2, 2))
np.zeros((2, 2))
?創建 2x2 全零矩陣,外層括號為函數調用,內層為元組參數。 -
全一矩陣:如np.ones(5)創建含5個1的一維數組
import numpy as np #創建全為一的數組 d=np.ones(5) e=np.ones((2,2)) f=np.ones((3,2,2)) print(d,'\n',e,'\n',f)
-
矩陣中填充指定數據
import numpy as np g=np.full((2,2,2),5) print(g)
生成一個全為5的(2,2,2)的三維數據
-
對角線為1的矩陣
import numpy as np h=np.eye(5,5) print(h)[[1. 0. 0. 0. 0.][0. 1. 0. 0. 0.][0. 0. 1. 0. 0.][0. 0. 0. 1. 0.][0. 0. 0. 0. 1.]]
5.序列生成函數
np.arange()
:類似?range()
,生成等差序列的矩陣(如?np.arange(0, 9, 3)
?生成?[0, 3, 6]
)。import numpy as np r1=np.arange(0,9,3)#(start,end,step)左閉右開的產生有規律的數據,與range()相似 print(r1)[0 3 6]
np.linspace()
:在指定區間內均勻分割生成數據(如?np.linspace(0, 1, 21)
?生成 21 個等間隔值)。import numpy as np r2=np.linspace(0,1,21)#(start,end,nums),左右都是閉區間 print(r2) [0. 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.55 0.6 0.650.7 0.75 0.8 0.85 0.9 0.95 1. ]
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
6.一維數組元素的選取和修改
索引與切片:與列表操作一致(如 array1[1] 獲取索引 1 的值)。
批量索引:通過列表指定多個索引(如 array1[[1, 3, 5]] 提取對應位置的值)。
修改元素:
單點修改:array1[0] = 10。
批量修改:array1[[1, 3, 5]] = 20 或切片賦值 array1[0:6] = 100
import numpy as np
array1=np.arange(1,9,1)
print(array1)# 選取某個元素
a=array1[1]# 選取某些元素
b=array1[[1,3,5]]
print(b)# 切片左閉右開
c=array1[0:6]
print(c)
# 修改某個元素
array1[0]=10
# 批量修改某些元素
array1[[1,3,5]]=20
print(array1)
array1[0:5]=10
print(array1)
[1 2 3 4 5 6 7 8]
[2 4 6]
[1 2 3 4 5 6]
[10 20 3 20 5 20 7 8]
[10 10 10 10 10 20 7 8]
注意:中括號 [] 在矩陣操作中僅用于索引/切片或創建列表,需注意上下文區分。
7.二維數組元素的選取和修改
import numpy as np
array1=np.arange(24).reshape(4,6)
print(array1)
[[ 0 1 2 3 4 5][ 6 7 8 9 10 11][12 13 14 15 16 17][18 19 20 21 22 23]]# 選取某個元素
a=array1[1,4]#第二行五列
# 選取某行元素
b=array1[1,:]#逗號分隔行和列
# 選取某些行
c=array1[[0,2],:]#如果不是連續的行,[]# 選取某列
d = array1[:,1]
# 選取某些列
e=array1[:,[1,3]]# 修改某個元素
array1[1,4]=100
# 修改某行元素
array1[1,:]=100
array1[[1,2],:]=50
8.三維矩陣元素的選取和修改
第一個逗號分隔維度,后續逗號分隔行和列(如 1,0,0 表示第一組數據的第0行第0列)
import numpy as np
array1=np.arange(48).reshape(2,4,6)
print(array1)
[[[ 0 1 2 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 28 29][30 31 32 33 34 35][36 37 38 39 40 41][42 43 44 45 46 47]]]
# 選取某個元素
# 首先確定選取哪個二維數組
a=array1[1,0,0]
print(a)
24
# 選取某行元素
b=array1[1,0,:]
print(b)
[24 25 26 27 28 29]
# 選取某些行元素
c=array1[0,[1,3],:]
print(c)
[[ 6 7 8 9 10 11][18 19 20 21 22 23]]
d=array1[0,1:3,:]
print(d)
[[ 6 7 8 9 10 11][18 19 20 21 22 23]]
# 選取某列
e=array1[0,:,1]
print(e)
[ 1 7 13 19]
# 選取某些列
f=array1[1,:,[1,3]]
print(f)
[[25 31 37 43][27 33 39 45]]
g=array1[0,:,1:4]
print(g)
[[ 1 2 3][ 7 8 9][13 14 15][19 20 21]]
# 修改
array1[1,0,0]=100