python学习笔记第二十二天--------NumPy(二)

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]]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值