python numpy 矩阵运算_numpy_ndarray的矩阵运算

ndarry的矩阵运算

数组是编程中的概念,矩阵、矢量是数学概念

在计算机编程中,矩阵可以用数组形式定义,矢量可以用结构定义

1. 矢量运算:相同大小的数组间运算应用在元素上

示例代码(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]]

矢量和标量运算:“广播” - 将标量“广播”到各个元素

# 矢量与标量运算

print(1. / arr)

print(2. * arr)

运算结果:

[[ 1. 0.5 0.33333333]

[ 0.25 0.2 0.16666667]]

[[ 2. 4. 6.]

[ 8. 10. 12.]]

ndarray的索引与切片

一维数组的索引与切片

与Python的列表索引功能相似

示例代码(1):

# 一维数组

arr1 = np.arange(10)

print(arr1)

print(arr1[2:5])

运行结果:

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

[2 3 4]

多维数组的索引与切片

arr[r1:r2, c1:c2]

arr[1,1]等价arr[1][1]

[:]代表某个维度的数据

示例代码(2):

# 多维数组

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

条件索引

布尔值多维数组:arr[condition], condition也可以是多个条件组合。

注意,多个条件组合要使用& |连接,而不是Python的 and or。

示例代码(3):

# 条件索引

# 找出 data_arr 中 2005年后的数据

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]

ndarray的维数转换

二维数组直接使用转换函数:transpose()

高维数组转换要指定维度编号参数(0,1,2,……),注意参数是元组

示例代码:

arr = np.random.rand(2, 3) # 2*3 数组

print(arr)

print(arr.transpose()) # 转换为 3*2 数组

arr3d = np.random.rand(2, 3, 4) # 2*3*4数组,2对应0, 3对应1,4对应2

print(arr3d)

print(arr3d.transpose((1, 0, 2))) # 根据维度编号,转换为3*2*4数组

运行结果:

# 高维数组转换

# 转换前:

[[[ 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]]]

你可能感兴趣的:(python,numpy,矩阵运算)