ndarray的矩阵运算
import numpy as np
arr = np.arange(10)
print(arr)
[0 1 2 3 4 5 6 7 8 9]
# 矩阵之间的运算,是按矩阵级的运算,每一个元素和对应索引的运算进行运算
print(arr * arr)
print(arr + arr)
[ 0 1 4 9 16 25 36 49 64 81]
[ 0 2 4 6 8 10 12 14 16 18]
# 广播运算,将标量广播到数组的各个元素上
print(1. + arr)
print(2 * arr)
[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]
[ 0 2 4 6 8 10 12 14 16 18]
ndarray 的切片、索引操作
#1. 一维数组的索引和切片操作
arr1 = np.arange(10)
print(arr1)
print(arr1[5:9])
[0 1 2 3 4 5 6 7 8 9]
[5 6 7 8]
# 2. 多维数组的索引和切片操作
#lis = range(10)
#arr3 = np.array([lis, lis])
#print(arr3)
arr2 = np.arange(10).reshape(2, 5)
print(arr2)
# 二维数组的索引和切片操作,[] 里第一个数字表示行所在的索引,第二个数字表示列所在的索引
print(arr2[1, :3])
# 如果某个数字只有 一个 : 那就表示全部匹配
print(arr2[:, :3])
[[0 1 2 3 4]
[5 6 7 8 9]]
[5 6 7]
[[0 1 2]
[5 6 7]]
ndarray 的条件索引
1.
year_arr = np.array([[2010, 2011, 2012],[2001, 2002, 2003],[ 2015, 2016, 2017]])
print(year_arr)
[[2010 2011 2012]
[2001 2002 2003]
[2015 2016 2017]]
# 将数组的每个元素和条件进行匹配,返回每个元素的匹配结果,是bool值
after2005_year = year_arr > 2005
print(after2005_year)
[[ True True True]
[False False False]
[ True True True]]
arr2 = np.random.randn(3, 3)
print(arr2)
[[-0.37791219 -0.64637402 -0.59096287]
[-1.02730703 0.02857597 0.71432543]
[-0.72702708 -0.39139429 -0.30935388]]
# 将bool数组 映射到arr2里,返回匹配为True的数值,返回的一维数组
new_arr2 = arr2[after2005_year]
print(new_arr2)
[-0.37791219 -0.64637402 -0.59096287 -0.72702708 -0.39139429 -0.30935388]
# 2. 可以同时指定多个条件索引,& 表示所有条件都符合,结果才为True; | 表示只要有一个条件符合,结果就为True
# 示例中:将多个条件索引返回的匹配结果,映射到新的数组上,返回匹配为True 的值,的一维数组
new_arr2 = arr2[(year_arr > 2005) & (year_arr < 2015)]
print(new_arr2)
[-0.37791219 -0.64637402 -0.59096287]
ndarray的维数转换 transpose()
# transponse() 将转换原数组的维度,如果是二维数组不需要指定参数
arr2 = np.random.rand(3, 4)
print(arr)
print("-----")
print(arr.transpose())
[[ 0.16999083 0.50601716 0.28392081 0.70684008]
[ 0.90124598 0.21389049 0.7387991 0.33142345]
[ 0.87686092 0.63811256 0.48762832 0.27096743]]
-----
[[ 0.16999083 0.90124598 0.87686092]
[ 0.50601716 0.21389049 0.63811256]
[ 0.28392081 0.7387991 0.48762832]
[ 0.70684008 0.33142345 0.27096743]]
#如果是多维数组,如 3维数组,则transpose()里的参数是一个元组,元组的每个元素都是原数组维度数所在的索引的值
# 4 对应索引是2, 3对应索引是1, 2对应索引是0, 则转换时写上索引即可
arr3 = np.random.rand(2, 3, 4)
print(arr3)
print("------")
print(arr3.transpose((2, 0, 1)))
[[[ 0.61639457 0.84812496 0.19361102 0.31457818]
[ 0.62200312 0.92004099 0.23347049 0.35335469]
[ 0.86486317 0.79885837 0.34411033 0.41257462]]
[[ 0.37305292 0.21077638 0.32414606 0.21110296]
[ 0.68084211 0.83998735 0.40823666 0.03573073]
[ 0.47724583 0.41015764 0.14933342 0.18136207]]]
------
[[[ 0.61639457 0.62200312 0.86486317]
[ 0.37305292 0.68084211 0.47724583]]
[[ 0.84812496 0.92004099 0.79885837]
[ 0.21077638 0.83998735 0.41015764]]
[[ 0.19361102 0.23347049 0.34411033]
[ 0.32414606 0.40823666 0.14933342]]
[[ 0.31457818 0.35335469 0.41257462]
[ 0.21110296 0.03573073 0.18136207]]]
来源:CSDN
作者:曾鸿举
链接:https://blog.csdn.net/zenghongju/article/details/104581795