ndarray的矩阵运算

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

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

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

2. 矢量和标量运算:"广播" - 将标量"广播"到各个元素

示例代码(2):

# 矢量与标量运算
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]

2. 多维数组的索引与切片:

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

3. 条件索引

布尔值多维数组: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)    # 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]]]
 

ndnarry矩阵处理的更多相关文章

  1. C语言 · 矩阵乘法 · 算法训练

    问题描述 输入两个矩阵,分别是m*s,s*n大小.输出两个矩阵相乘的结果. 输入格式 第一行,空格隔开的三个正整数m,s,n(均不超过200). 接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j ...

  2. 获取Canvas当前坐标系矩阵

    前言 在我的另一篇博文 Canvas坐标系转换 中,我们知道了所有的平移缩放旋转操作都会影响到画布坐标系.那在我们对画布进行了一系列操作之后,怎么再知道当前矩阵数据状态呢. 具体代码 首先请看下面的一 ...

  3. CSharpGL(32)矩阵与四元数与角度旋转轴的相互转换

    CSharpGL(32)矩阵与四元数与角度旋转轴的相互转换 三维世界里的旋转(rotate),可以用一个3x3的矩阵描述:可以用(旋转角度float+旋转轴vec3)描述.数学家欧拉证明了这两种形式可 ...

  4. “为什么DirectX里表示三维坐标要建一个4*4的矩阵?”

    0x00 前言 首先要说明的是,本文的标题事实上来自于知乎上的一个同名问题:为什么directX里表示三维坐标要建一个4*4的矩阵? - 编程 .因此,正如Milo Yip大神所说的这个标题事实上是存 ...

  5. js实现蛇形矩阵

    参加腾讯前端实习生笔试,真的是被虐了千百遍,除了一条js程序题,其他半点前端都没有,都是考算法,计算机原理,数据结构.下面贴上腾讯笔试最后三大条中的一条,实现一个蛇形矩阵的输出.蛇形矩阵的什么样这里我 ...

  6. ACM 中 矩阵数据的预处理 && 求子矩阵元素和问题

            我们考虑一个$N\times M$的矩阵数据,若要对矩阵中的部分数据进行读取,比如求某个$a\times b$的子矩阵的元素和,通常我们可以想到$O(ab)$的遍历那个子矩阵,对它的各 ...

  7. PAT 1050. 螺旋矩阵(25)

    本题要求将给定的N个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条 ...

  8. [LeetCode] Kth Smallest Element in a Sorted Matrix 有序矩阵中第K小的元素

    Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth ...

  9. [LeetCode] Longest Increasing Path in a Matrix 矩阵中的最长递增路径

    Given an integer matrix, find the length of the longest increasing path. From each cell, you can eit ...

随机推荐

  1. 删除 mac 垃圾桶内清除不掉的文件

    命令行 内 $ sudo rm -rf ~/.Trash/

  2. iOS自动化探索(五)自动化测试框架pytest - Assert断言的使用

    使用assert语句进行断言 pytest允许使用标准的python assert语法,用来校验expectation and value是否一致 代码演示: def func(): def test ...

  3. (转)程序员应该知道的10个eclipse调试技巧

    调试不仅可以查找到应用程序缺陷所在,还可以解决缺陷.对于Java程序员来说,他们不仅要学会如何在Eclipse里面开发像样的程序,更需要学会如何调试程序.本文介绍了Java程序员必知的10个调试技巧, ...

  4. DTO数据传输对象

    如果有多个对象需要传输到页面上需要用DTO传输

  5. 指针和引用在C++中应用

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解 ...

  6. linux rhel7下安装python

    1.查看是否已经安装Python Centos7默认安装了python2.7.5 因为一些命令要用它比如yum 它使用的是python2.7.5. 使用python -V命令查看一下是否安装Pytho ...

  7. windows服务是如何被调用的?

    1.服务介绍 操作系统在启动的时候,会启动一些不需要用户交互的进程.这些进程被称为服务.当操作系统启动后它就自动被运行. 2.组成 服务程序.服务控制程序(SCP,service control pr ...

  8. LeetCode Delete Operation for Two Strings

    原题链接在这里:https://leetcode.com/problems/delete-operation-for-two-strings/description/ 题目: Given two wo ...

  9. 转载 matlab矩阵数组常用操作

    一. length             返回矩阵最长维的的长度    ndims       返回维数          numel      返回矩阵元素个数size               ...

  10. Spring IOC容器的初始化-(三)BeanDefinition的注册

    ---恢复内容开始--- 前言 在上一篇中有一处代码是BeanDefiniton注册的入口,我们回顾一下. 1.BeanDefiniton在IOC容器注册 首先我们回顾两点,1. 发起注册的地方:2. ...