您好,欢迎来到网暖!

当前位置:网暖 » 站长资讯 » 建站基础 » 网络技术 » 文章详细 订阅RssFeed

numpy_ndarray的矩阵运算

来源:网络整理 浏览:266次 时间:2020-04-05
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]]
  1. 矢量和标量运算:“广播” - 将标量“广播”到各个元素
# 矢量与标量运算print(1. / arr)print(2. * arr)

运算结果:

[[ 1.          0.5         0.33333333] [ 0.25        0.2         0.16666667]][[  2.   4.   6.] [  8.  10.  12.]]
ndarray的索引与切片
  1. 一维数组的索引与切片
与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]
  1. 多维数组的索引与切片

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]]
  1. 条件索引
布尔值多维数组: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 >= 2005print(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对应2print(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]]]

推荐站点

  • 腾讯腾讯

    腾讯网(www.QQ.com)是中国浏览量最大的中文门户网站,是腾讯公司推出的集新闻信息、互动社区、娱乐产品和基础服务为一体的大型综合门户网站。腾讯网服务于全球华人用户,致力成为最具传播力和互动性,权威、主流、时尚的互联网媒体平台。通过强大的实时新闻和全面深入的信息资讯服务,为中国数以亿计的互联网用户提供富有创意的网上新生活。

    www.qq.com
  • 搜狐搜狐

    搜狐网是全球最大的中文门户网站,为用户提供24小时不间断的最新资讯,及搜索、邮件等网络服务。内容包括全球热点事件、突发新闻、时事评论、热播影视剧、体育赛事、行业动态、生活服务信息,以及论坛、博客、微博、我的搜狐等互动空间。

    www.sohu.com
  • 网易网易

    网易是中国领先的互联网技术公司,为用户提供免费邮箱、游戏、搜索引擎服务,开设新闻、娱乐、体育等30多个内容频道,及博客、视频、论坛等互动交流,网聚人的力量。

    www.163.com
  • 新浪新浪

    新浪网为全球用户24小时提供全面及时的中文资讯,内容覆盖国内外突发新闻事件、体坛赛事、娱乐时尚、产业资讯、实用信息等,设有新闻、体育、娱乐、财经、科技、房产、汽车等30多个内容频道,同时开设博客、视频、论坛等自由互动交流空间。

    www.sina.com.cn
  • 百度一下百度一下

    百度一下,你就知道

    www.baidu.com