ndarray的矩陣運算

2021-08-21 04:43:56 字數 3844 閱讀 7303

陣列是程式設計中的概念,矩陣、向量是數學概念。

在計算機程式設計中,矩陣可以用陣列形式定義,向量可以用結構定義!

1. 向量運算:相同大小的陣列間運算應用在元素上

# 向量與向量運算

arr = np.array([[1, 2, 3],

[4, 5, 6]])

print("元素相乘:")

print(arr * arr)

print("矩陣相加:")

print(arr + arr)

元素相乘:

[[ 1 4 9]

[16 25 36]]

矩陣相加:

[[ 2 4 6]

[ 8 10 12]]

2. 向量和標量運算:"廣播" - 將標量"廣播"到各個元素
# 向量與標量運算

print(1 / arr)

print(2 * arr)

[[ 1.          0.5         0.33333333]

[ 0.25 0.2 0.16666667]]

[[ 2 4 6]

[ 8 10 12]]

1. 一維陣列的索引與切片
與python的列表索引功能相似

# 一維陣列

arr1 = np.arange(10)

print(arr1)

print(arr1[2:5])

[0 1 2 3 4 5 6 7 8 9]

[2 3 4]

2. 多維陣列的索引與切片:
arr[r1:r2, c1:c2]

arr[1,1] 等價 arr[1][1]

[:] 代表某個維度的資料

# 多維陣列

arr2 = np.arange(12).reshape(3,4)

print(arr2)

print(arr2[1])

print(arr2[0:2, 2:])

print(arr2[:, 1:3])

[[ 0  1  2  3]

[ 4 5 6 7]

[ 8 9 10 11]]

[4 5 6 7]

[[2 3]

[6 7]]

[[ 1 2]

[ 5 6]

[ 9 10]]

3. 條件索引
布林值多維陣列:arr[condition],condition也可以是多個條件組合。

注意,多個條件組合要使用 & | 連線,而不是python的 and or。

# 條件索引

# 找出 data_arr 中 2023年後的資料

data_arr = np.random.rand(3,3)

print(data_arr)

year_arr = np.array([[2000, 2001, 2000],

[2005, 2002, 2009],

[2001, 2003, 2010]])

is_year_after_2005 = year_arr >= 2005

print(is_year_after_2005, is_year_after_2005.dtype)

filtered_arr = data_arr[is_year_after_2005]

print(filtered_arr)

#filtered_arr = data_arr[year_arr >= 2005]

#print(filtered_arr)

# 多個條件

filtered_arr = data_arr[(year_arr <= 2005) & (year_arr % 2 == 0)]

print(filtered_arr)

[[ 0.53514038  0.93893429  0.1087513 ]

[ 0.32076215 0.39820313 0.89765765]

[ 0.6572177 0.71284822 0.15108756]]

[[false false false]

[ true false true]

[false false true]] bool

[ 0.32076215 0.89765765 0.15108756]

#[ 0.32076215 0.89765765 0.15108756]

[ 0.53514038 0.1087513 0.39820313]

二維陣列直接使用轉換函式:transpose()

高維陣列轉換要指定維度編號引數 (0, 1, 2, …),注意引數是元組

arr = np.random.rand(2,3)    # 2x3 陣列

print(arr)

print(arr.transpose()) # 轉換為 3x2 陣列

arr3d = np.random.rand(2,3,4) # 2x3x4 陣列,2對應0,3對應1,4對應3

print(arr3d)

print(arr3d.transpose((1,0,2))) # 根據維度編號,轉為為 3x2x4 陣列

# 二維陣列轉換

# 轉換前:

[[ 0.50020075 0.88897914 0.18656499]

[ 0.32765696 0.94564495 0.16549632]]

# 轉換後:

[[ 0.50020075 0.32765696]

[ 0.88897914 0.94564495]

[ 0.18656499 0.16549632]]

# 高維陣列轉換

# 轉換前:

[[[ 0.91281153 0.61213743 0.16214062 0.73380458]

[ 0.45539155 0.04232412 0.82857746 0.35097793]

[ 0.70418988 0.78075814 0.70963972 0.63774692]]

[[ 0.17772347 0.64875514 0.48422954 0.86919646]

[ 0.92771033 0.51518773 0.82679073 0.18469917]

[ 0.37260457 0.49041953 0.96221477 0.16300198]]]

# 轉換後:

[[[ 0.91281153 0.61213743 0.16214062 0.73380458]

[ 0.17772347 0.64875514 0.48422954 0.86919646]]

[[ 0.45539155 0.04232412 0.82857746 0.35097793]

[ 0.92771033 0.51518773 0.82679073 0.18469917]]

[[ 0.70418988 0.78075814 0.70963972 0.63774692]

[ 0.37260457 0.49041953 0.96221477 0.16300198]]]

N維陣列 3 ndarray運算

import numpy as np 生成10名同學,5門功課的資料 score np.random.randint 40,100,10 5 scorearray 98,47,44,77,43 46,78,52,54,87 64,78,67,75,59 59,72,78,59,50 92,55,56...

矩陣的運算

目錄 1.矩陣與數相乘 每一項都要乘 2.矩陣的加減運算 每一項都要乘 3.矩陣相乘 4.矩陣對應元素相乘 同型矩陣 5.矩陣的轉置 t 6.矩陣的共軛轉置 h 7.矩陣的逆 i 8.矩陣的試圖 a import numpy as np m1 np.mat 1,2,3 2,3,4 print m m...

矩陣的運算

矩陣的常用運算包括 加法 減法 點乘 點除和乘法等。矩陣的加法就是2個矩陣對應位置的數值相加。in 1 import numpy as np in 2 m1 np.array 1,2,3 4,5,6 np.uint8 in 3 m2 np.array 4,5,6 7,8,9 np.uint8 in ...