今天学习了3节:

18, NumPy副本和视图
19, NumPy字节交换
20, NumPy Matrix矩阵库
numpy_test10.py :
import numpy as np

'''
18, NumPy副本和视图 对 NumPy 数组执行些函数操作时,其中一部分函数会返回数组的副本,而另一部分函数则返回数组的视图。 其实从内存角度来说,副本就是对原数组进行深拷贝,新产生的副本与原数组具有不同的存储位置。
而视图可理解为对数组的引用,它和原数组有着相同的内存位置。
'''
print("----18, NumPy副本和视图----")
'''
(1) 赋值操作
赋值操作是数组引用的一种方法,可以称为 视图 。比如,将 a 数组赋值给变量 b,被赋值后的变量 b 与 a 组具有相同的内存 id。
因此,无论操作 a、b 中哪个数组,另一个数组也会受到影响。
'''
print("----(1) 赋值操作----")
arr1 = np.array([[1, 2, 3, 4], [5, 2, 3, 1], [1, 5, 3, 13]])
print('arr1 : ', arr1)
print("arr1数组的id:", id(arr1))
arr2 = arr1
print("arr2数组的id:", id(arr2))
# 修改 arr2 数组的形状大小
arr2.shape = (4, 3)
print("arr2 数组形状的更改也会反映到 arr1 数组上:")
print('arr1 : ', arr1)
'''
arr1 : [[ 1 2 3 4]
[ 5 2 3 1]
[ 1 5 3 13]]
arr1数组的id: 1787774881088
arr2数组的id: 1787774881088
arr2 数组形状的更改也会反映到 arr1 数组上:
arr1 : [[ 1 2 3]
[ 4 5 2]
[ 3 1 1]
[ 5 3 13]]
''' '''
(2) ndarray.view()
ndarray.view() 返回一个新生成的数组副本,因此对该数组的操作,不会影响到原数组。
'''
print("----(2) ndarray.view()----")
arr3 = np.array([[1, 2, 3, 4], [5, 2, 3, 1], [1, 5, 3, 13]])
print('arr3 : ', arr3)
print("arr3 数组的id:", id(arr3))
arr4 = arr3.view()
print("arr4 数组的id:", id(arr4))
print('arr4 : ', arr4)
# 修改 arr4 数组的形状大小
arr4.shape = (4, 3)
print("修改 arr4 数组的形状大小后:")
print("arr3 : ", arr3)
print("arr4 : ", arr4)
'''
arr3 : [[ 1 2 3 4]
[ 5 2 3 1]
[ 1 5 3 13]]
arr3 数组的id: 2462990769912
arr4 数组的id: 2462990948464
arr4 : [[ 1 2 3 4]
[ 5 2 3 1]
[ 1 5 3 13]]
修改 arr4 数组的形状大小后:
arr3 : [[ 1 2 3 4]
[ 5 2 3 1]
[ 1 5 3 13]]
arr4 : [[ 1 2 3]
[ 4 5 2]
[ 3 1 1]
[ 5 3 13]]
''' '''
(3) 切片创建视图
使用切片可以创建视图数组,若要修改视图的就会影响到原数组。
'''
print("----(3) 切片创建视图----")
arr5 = np.array([1, 2, 3, 4, 5, 2, 3, 5, 3, 13])
print('arr5 : ', arr5)
print("arr5 数组的id:", id(arr5))
# 创建切片修改原数组arr
arr5_a = arr5[5:]
print('arr5_a : ', arr5_a)
arr5_b = arr5[6:]
print('arr5_b : ', arr5_b)
arr5_a[1] = 23
arr5_b[2] = 45
print("切片修改原数组arr5后:")
print('arr5 : ', arr5)
print("arr5 数组的id:", id(arr5))
'''
arr5 : [ 1 2 3 4 5 2 3 5 3 13]
arr5 数组的id: 1911254767552
arr5_a : [ 2 3 5 3 13]
arr5_b : [ 3 5 3 13]
切片修改原数组arr5后:
arr5 : [ 1 2 3 4 5 2 23 5 45 13]
arr5 数组的id: 1911254767552
''' '''
(4) ndarray.copy()
该方法返回原数组的副本,对副本的修改不会影响到原数组。
'''
print("----(4) ndarray.copy()----")
arr6 = np.array([[1, 2, 3, 4], [5, 2, 3, 1], [1, 5, 3, 13]])
print('arr6 : ', arr6)
print("arr6 数组的id:", id(arr6))
arr7 = arr6.copy()
print('arr7 : ', arr7)
print("arr7 数组的id:", id(arr7))
# 修改 arr7 数组的形状大小
arr7.shape = (4, 3)
print("修改 arr7 数组的形状大小后:")
print('arr7 : ', arr7)
print("arr7 数组的id:", id(arr7))
'''
arr6 : [[ 1 2 3 4]
[ 5 2 3 1]
[ 1 5 3 13]]
arr6 数组的id: 2399353014648
arr7 : [[ 1 2 3 4]
[ 5 2 3 1]
[ 1 5 3 13]]
arr7 数组的id: 2399353014736
修改 arr7 数组的形状大小后:
arr7 : [[ 1 2 3]
[ 4 5 2]
[ 3 1 1]
[ 5 3 13]]
arr7 数组的id: 2399353014736
''' '''
19, NumPy字节交换
数据以字节的形式存储在计算机内存中,而存储规则可分为两类,即小端字节序与大端字节序。 小端字节序(little-endian),表示低位字节排放在内存的低地址端,
高位字节排放在高地址段,它与大端字节序(big-endian)恰好相反。 对于二进制数 0x12345678,假设从地址 0x4000 开始存放,在大端和小端模式下,它们的字节排列顺序,如下所示:
内存地址增大方向
<----------------------------------------
0x4003 0x4002 0x4001 0x4000
ↆ ↆ ↆ ↆ
|0x12|...|0x34|...|0x56|...|0x78|...《=== 小端
|0x78|...|0x56|...|0x34|...|0x12|...《=== 大端
<----------------------------------------
图1:字节存储模式 小端存储后:0x78563412 大端存储后:0x12345678。
'''
print("----19, NumPy字节交换----")
'''
(1) ndarray.byteswap()
该函数将数组中每个元素的字节顺序进行大小端调换。
'''
print("----(1) ndarray.byteswap()----")
arr8 = np.array([1, 346, 825], dtype=np.int16)
print('arr8 : ', arr8)
# 以16进制形式表示内存中的数据
print('map(hex, arr8) : ', map(hex, arr8))
# byteswap()函数通过传递True参数在适当的位置进行转换
arr9 = arr8.byteswap(True)
print('arr8.byteswap(True) 位置进行转换后数组: ')
print('arr9 : ', arr9)
# 以16进制形式表示内存中的数据
print('map(hex, arr8) : ', map(hex, arr8))
'''
arr8 : [ 1 346 825]
map(hex, arr8) : <map object at 0x000001737739AAC8>
arr8.byteswap(True) 位置进行转换后数组:
arr9 : [ 256 23041 14595]
map(hex, arr8) : <map object at 0x0000017376E96780>
''' '''
20, NumPy Matrix矩阵库
NumPy 提供了一个 矩阵库模块numpy.matlib,该模块中的函数返回的是一个 matrix 对象,而非 ndarray 对象。
矩阵由 m 行 n 列(m*n)元素排列而成,矩阵中的元素可以是数字、符号或数学公式等。
'''
print("----20, NumPy Matrix矩阵库----")
'''
(1) numpy.matlib.empty()
matlib.empty() 返回一个空矩阵,所以它的创建速度非常快。
numpy.matlib.empty(shape, dtype, order) 该函数的参数说明如下:
shape:以元组的形式指定矩阵的形状。
dtype:表示矩阵的数据类型。
order:有两种选择,C(行序优先) 或者 F(列序优先)。
'''
import numpy.matlib
print("----(1) np.matlib.empty()----")
# 矩阵中会填充无意义的随机值
matrix1 = np.matlib.empty((2, 2))
print('matrix1 : ', matrix1)
'''
matrix1 : [[9.90263869e+067 8.01304531e+262]
[2.60799828e-310 1.13738974e-311]]
''' '''
(2) numpy.matlib.zeros()
numpy.matlib.zeros() 创建一个以 0 填充的矩阵.
'''
print("----(2) numpy.matlib.zeros()----")
# 创建一个以 0 填充的矩阵
matrix2 = np.matlib.zeros((2, 2))
print('matrix2 : ', matrix2)
'''
matrix2 : [[0. 0.]
[0. 0.]]
''' '''
(3) numpy.matlib.ones()
numpy.matlib.ones() 创建一个以 1 填充的矩阵。
'''
print("----(3) numpy.matlib.ones()----")
# 创建一个以 1 填充的矩阵
matrix3 = np.matlib.ones((2, 2))
print('matrix3 : ', matrix3)
'''
matrix3 : [[1. 1.]
[1. 1.]]
''' '''
(4) numpy.matlib.eye()
numpy.matlib.eye() 返回一个对角线元素为 1,而其他元素为 0 的矩阵 。
----行列数不一定一致。 numpy.matlib.eye(n, M, k, dtype):
n:返回矩阵的行数;
M:返回矩阵的列数,默认为 n;
k:对角线的索引;
dtype:矩阵中元素数据类型。
'''
print("----(4) numpy.matlib.eye()----")
# 创建一个对角线元素为 1,而其他元素为 0 的矩阵
matrix4 = np.matlib.eye(n=3, M=4, k=0, dtype=int)
print('matrix4 : ', matrix4)
'''
matrix4 : [ [1 0 0 0]
[0 1 0 0]
[0 0 1 0]]
''' '''
(5) numpy.matlib.identity()
该函数返回一个给定大小的单位矩阵,矩阵的对角线元素为 1,而其他元素均为 0。
----行列数一致。
'''
print("----(5) numpy.matlib.identity()----")
# 创建一个给定大小的单位矩阵,矩阵的对角线元素为 1,而其他元素均为 0 的矩阵
matrix5 = np.matlib.identity(3, dtype=int)
print('matrix5 : ', matrix5)
'''
matrix5 : [ [1 0 0]
[0 1 0]
[0 0 1]]
''' '''
(6) numpy.matlib.rand()
numpy.matlib.rand() 创建一个以随机数填充,并给定维度的矩阵。
'''
print("----(6) numpy.matlib.rand()----")
# 创建一个以随机数填充,并给定维度的矩阵
matrix6 = np.matlib.rand(3, 3)
print('matrix6 : ', matrix6)
'''
matrix6 : [ [0.47852887 0.45872498 0.74952163]
[0.52896064 0.87761579 0.23843873]
[0.8692609 0.74930949 0.36049231]]
''' '''
(7) matrix 与 ndarray 之间的转换
这里需要注意,因为 matrix 只能表示二维数据,而 ndarray 也可以是二维数组,所以两者可以互相转换。
'''
print("----(7) matrix 与 ndarray 之间的转换----")
# 创建矩阵方式1
matrix7 = np.matrix('1,2;3,4')
print('matrix7 : ', matrix7)
# 创建矩阵方式2
matrix8 = np.matrix([[5, 6], [7, 8]])
print('matrix8 : ', matrix8)
# 创建矩阵方式3
arr10 = np.array([[5, 6], [7, 8]])
print('arr10 : ', arr10)
matrix9 = np.matrix(arr10)
print('matrix9 : ', matrix9)
print('type(matrix9) : ', type(matrix9)) # matrix 转换为 ndarray
print("----matrix 转换为 ndarray----")
arr11 = np.asarray(matrix9)
print('arr11 : ', arr11)
print('type(arr11) : ', type(arr11))
# ndarray 转换为 matrix
print("----ndarray 转换为 matrix----")
matrix10 = np.asmatrix(arr11)
print('matrix10 : ', matrix10)
print('type(matrix10) : ', type(matrix10))
'''
matrix7 : [[1 2]
[3 4]]
matrix8 : [[5 6]
[7 8]]
arr10 : [[5 6]
[7 8]]
matrix9 : [[5 6]
[7 8]]
type(matrix9) : <class 'numpy.matrix'>
----matrix 转换为 ndarray----
arr11 : [[5 6]
[7 8]]
type(arr11) : <class 'numpy.ndarray'>
----ndarray 转换为 matrix----
matrix10 : [[5 6]
[7 8]]
type(matrix10) : <class 'numpy.matrix'>
'''

  

NumPy学习10的更多相关文章

  1. NumPy学习笔记 二

    NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...

  2. NumPy学习笔记 一

    NumPy学习笔记 一 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...

  3. 数据分析之Pandas和Numpy学习笔记(持续更新)<1>

    pandas and numpy notebook        最近工作交接,整理电脑资料时看到了之前的基于Jupyter学习数据分析相关模块学习笔记.想着拿出来分享一下,可是Jupyter导出来h ...

  4. NumPy学习(索引和切片,合并,分割,copy与deep copy)

    NumPy学习(索引和切片,合并,分割,copy与deep copy) 目录 索引和切片 合并 分割 copy与deep copy 索引和切片 通过索引和切片可以访问以及修改数组元素的值 一维数组 程 ...

  5. NumPy学习(让数据处理变简单)

    NumPy学习(一) NumPy数组创建 NumPy数组属性 NumPy数学算术与算数运算 NumPy数组创建 NumPy 中定义的最重要的对象是称为 ndarray 的 N 维数组类型. 它描述相同 ...

  6. numpy 学习笔记

    numpy 学习笔记 导入 numpy 包 import numpy as np 声明 ndarray 的几种方法 方法一,从list中创建 l = [[1,2,3], [4,5,6], [7,8,9 ...

  7. numpy 学习总结

    numpy 学习总结 作者:csj更新时间:01.09 email:59888745@qq.com 说明:因内容较多,会不断更新 xxx学习总结: 回主目录:2017 年学习记录和总结 #生成数组/使 ...

  8. (转)Python数据分析之numpy学习

    原文:https://www.cnblogs.com/nxld/p/6058572.html https://morvanzhou.github.io/tutorials/data-manipulat ...

  9. Numpy学习1

    NumPy学习(1) 参考资料: http://www.cnblogs.com/zhanghaohong/p/4854858.html http://linusp.github.io/2016/02/ ...

  10. Numpy学习笔记(下篇)

    目录 Numpy学习笔记(下篇) 一.Numpy数组的合并与分割操作 1.合并操作 2.分割操作 二.Numpy中的矩阵运算 1.Universal Function 2.矩阵运算 3.向量和矩阵运算 ...

随机推荐

  1. Qt编写地图综合应用6-百度在线地图

    一.前言 百度在线地图的应用老早就做过,后面经过不断的完善才到今天的这个程序,除了基本的可以载入地图并设置一些相关的属性以外,还增加了各种js函数直接异步加载数据比如动态添加点.矩形.圆形.行政区划等 ...

  2. Qt开源作品16-通用无边框拖动拉伸

    一.前言 相信各位CS结构开发的程序员,多多少少都遇到过需要美化界面的事情,一般都不会采用系统的标题栏,这样就需要无边框标题栏窗体,默认的话无边框的标题栏都不支持拉伸和拖动的,毕竟去掉了标题栏则意味着 ...

  3. 得物从0到1自研客服IM系统的技术实践之路

    本文由得物技术王卫强分享,为了更好的阅读体验,有较多的内容修订和排版优化. 一.引言 客服IM的核心业务其实就是在线沟通,客服IM的好处是使得客服与用户通过实时沟通的方式可以在最短的时间内帮助用户解决 ...

  4. 零基础Windows Server搭建部署Word Press 博客系列教程(2):从菜鸡到高手之Windows Server 环境配置

    上一篇:零基础Windows Server搭建部署Word Press 博客系列教程(1):从萌新到菜鸡之云主机配置与备案 本篇教程主要介绍在云主机上安装好相关组件并配置好环境,直至网站上线. 1.之 ...

  5. 高通Android工程释放ADSP侧GPIO给AP侧(HLOS)解决uart只能收或者发,gpio 无法配置成输入或者输出

    在许多sensor的调试过程中总是会遇到各种GPIO被占用的情况,特别是以下几种情况:UART 只能发或收,GPIO 配置了pinctl output但是gpio依旧为输入. 1.判断GPIO口状态 ...

  6. # 个人认为windows下最好用的一批软件 #

    个人认为windows下最好用的一批软件 chrome 为什么是chrome而不是edge2? 这当然不是因为我是谷歌吹什么的.其实当得知edge2比chrome更省内存,运行更快,而且不跨越城墙就能 ...

  7. CDS标准视图:一次性账户的客户行项目 I_ONETIMEACCOUNTCUSTOMER

    视图名称:一次性账户的客户行项目 视图类型:基础 视图代码: 点击查看代码 @EndUserText.label: 'One-Time Account Data for Customer Items' ...

  8. Ps cs4 -把GIF背景变透明-简单操作,还可以将视频转换GIF

    准备软件: 1.Ps cs4 2.QuickTime Player 7.74 开始: 1. 2.弹出文件选择框,但是发现不能选择GIF格式. 3.没关系,在文件名框输入*.*回车,就发现可以选择GIF ...

  9. ClickHouse-5操作

    ClickHouse操作手册由以下主要部分组成: 安装要求 监控 故障排除 使用建议 更新程序 访问权限 数据备份 配置文件 配额 系统表 服务器配置参数 如何用ClickHouse测试你的硬件 设置 ...

  10. GD32F103C8T6看门狗

    GD32F10x看门狗 两个看门狗设备(独立看门狗IWDG和窗口看门狗WWDG)可用来检测和解决由软件错误引起的故障: 当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位. ...