NumPy是什么?

使用Python进行科学计算的基础包,在数据分析的时候比较常用到矩阵计算。这时太多的Np属性不记得,所以方便自己使用把一些常用的Np属性汇总记录一下使用的时候方便查找。

ndarray.ndim
阵列的轴数(尺寸)。
ndarray.shape
数组的大小。这是一个整数元组,表示每个维度中数组的大小。对于具有n行和m列的矩阵,shape将是(n,m)。shape因此,元组的长度 是轴的数量ndim。
ndarray.size
数组的元素总数。这相当于元素的乘积shape。
ndarray.dtype
描述数组中元素类型的对象。可以使用标准Python类型创建或指定dtype。此外,NumPy还提供自己的类型。numpy.int32,numpy.int16和numpy.float64就是一些例子。
ndarray.itemsize
数组中每个元素的大小(以字节为单位)。例如,类型的元素数组float64有itemsize8(= 64/8),而其中一个类型complex32有itemsize4(= 32/8)。它相当于ndarray.dtype.itemsize。
ndarray.data
包含数组实际元素的缓冲区。通常,我们不需要使用此属性,因为我们将使用索引工具访问数组中的元素

杂乱的知识?

查看一个函数的帮助文档,可以直接在文件里输入代码:  help(np.add)

或者在命令行中输入:np.info(np.add)

查看包的版本号信息,可以直接输出:    np.__version__

用zero函数创建数组,默认单元大小是八个字节(也就是默认double?)

import numpy as np
A = np.zeros(4)
print(A.itemsize)
print(A.itemsize*A.size)输出:
8
32

注意数组起始下标是从0开始的。

关于arange和reshape函数:

import numpy as np
A = np.arange(8).reshape(2,4)
print(A)输出:
[[0 1 2 3][4 5 6 7]]

关于返回非零元素的下标的一系列骚操作:

import numpy as np
A = np.arange(8).reshape(2,4)
A=A+1
A[0][1]=0
print(A)
print(np.nonzero(A))输出:
[[1 0 3 4][5 6 7 8]]
(array([0, 0, 0, 1, 1, 1, 1], dtype=int64), array([0, 2, 3, 0, 1, 2, 3], dtype=int64))

其中返回的两个参数,一个是第一维的下标,一个是第二维的下标。

关于eye函数,random函数,以及变量性质的测试

B = np.eye(2)
print(B)
print(B.size)
print(B[0][1])
B=np.random.random((3,2))
print(B)
B="hello"
print(B)输出:
[[1. 0.][0. 1.]]
4
0.0
[[0.29490288 0.14067274][0.96161076 0.92929841][0.26694438 0.40938209]]
hello

由此可见,相同都变量名是可以在不同时刻代替不同东西的。

但是不能对这个变量的其中一部分进行代替操作:(下面的函数中,只运行前两行是没有问题的)

程序1:
qqweqeqweqq = np.zeros(12)
for i in range(10):qqweqeqweqq[i]=np.zeros(12)Error:
ValueError: setting an array element with a sequence.
----------------------------------------------------------------------------------
程序2:
qqweqeqweqq = np.zeros((10,2))
for i in range(10):qqweqeqweqq[i]=np.zeros(12)Error:
ValueError: could not broadcast input array from shape (12) into shape (2)

但是这样是没有问题的:

qqweqeqweqq = np.zeros((10,2))
qqweqeqweqq = np.zeros(12)

疑问:sequence,array,list,dic,都有啥区别? 

sum函数,max函数,min函数,mean函数

B=np.random.random((3,2))
print(B)
print(B.max(),B.min(),B.mean())输出:
[[0.89882712 0.77860196][0.7093924  0.15120126][0.99924821 0.91765126]]
0.9992482107724574 0.15120126168466463 0.7424870345505307

对应的,可以添加参数axis=0代表在第0维上进行合并

进一步体验random函数

np1.random.rand(0-1之间的的随机数生成)\randn(服从正态分布的随机数生成)\randint(随机整数的生成)\choice([])(随机数产生的范围自定义)\......(其他随机数类型),举例如下:(图片源自链接)

体验索引下标区别:

B=np.arange(25).reshape((5,5))
print(B)
print(B[1:-1,1:-1])
print(B[1:-1])
print(B[1:-1][1:-1])输出:
[[ 0  1  2  3  4][ 5  6  7  8  9][10 11 12 13 14][15 16 17 18 19][20 21 22 23 24]]
[[ 6  7  8][11 12 13][16 17 18]]
[[ 5  6  7  8  9][10 11 12 13 14][15 16 17 18 19]]

int,float,str之间的类型转换:

    num2 = "123";num2 = int(num1);print("num2: %d" % num2);'''输出  num2: 123'''num1 = "123.12";num2 = float(num1);print("num2: %f" % num2);'''num2: 123.120000'''num = 123;mystr = str(num);print ("%s" % mystr);''' 输出 123   '''

其他小测试:(关于numpy的sum函数)

range(2,4)
Out[141]: range(2, 4)np.sum(range(4))
Out[142]: 6qqqq=range(4)qqqq
Out[144]: range(0, 4)type(qqqq)
Out[145]: rangenp.sum(range(10,12))
Out[146]: 21

numpy包中,还有一个非常实用的玩意:矩阵操作。

创建一个矩阵,可以使用函数np,mat(...),参数可以是一个list或者是一个narray。

你想构建一个2*3的全1矩阵,则只需要:

A=np.mat(np.ones(6).reshape(2,3))

即可。

现在假设A是个矩阵,那么:

求矩阵的逆:A.I         或者:np.linalg.inv(A)

求矩阵的转置:A.T     或者:  A.linalg.transpose()

求矩阵的行列式:np.linalg.det(A)

求矩阵的特征值和特征向量:np.linalg.eig(np1)

矩阵的点乘:np.linalg.dot(A,B)

求线性方程组的解:
首先写出方程组的右边的y值向量:y=np.array([[y1],[y2],[y3]...])
函数值的集合等于 x=np.linalg.solve(A,y)

但是要注意np.mat()和np.matrix()的区别:后者是完全复制,前者是当参数是矩阵的时候是直接引用的。

关于数据保存

Numpy提供了几种数据保存的方法。

以3*4数组a为例:

1. a.tofile("filename.bin")

这种方法只能保存为二进制文件,且不能保存当前数据的行列信息,文件后缀不一定非要是bin,也可以为txt,但不影响保存格式,都是二进制。

这种保存方法对数据读取有要求,需要手动指定读出来的数据的的dtype,如果指定的格式与保存时的不一致,则读出来的就是错误的数据。

b = numpy.fromfile("filename.bin",dtype = **)

读出来的数据是一维数组,需要利用

b.shape = 3,4重新指定维数。

2.numpy.save("filename.npy",a)

利用这种方法,保存文件的后缀名字一定会被置为.npy,这种格式最好只用

numpy.load("filename")来读取。

3.numpy.savetxt("filename.txt",a)

b =  numpy.loadtxt("filename.txt")

用于处理一维和二维数组

两个数组的拼接:

np.concatenate((list1,list2),axis=0):矩阵之间的拼接

axis=0,代表在行方向上拼接(竖着接到后面)

axis=1,代表在列方向上拼接(横着接到后面)

【Python学习日志】 - Numpy包相关推荐

  1. Python学习日志--摆动吧!钟摆!

    Python学习日志–摆动吧!钟摆! 由于读研跟着导师搞人工智能方向,所以开始学习python,在学习到使用到tkinter进行GUI设计这部分的时候,有一道很有意思的编程题:用tkinter动态演示 ...

  2. Python学习日志12 - 办公自动化

    Python学习日志 RBHGO的主页欢迎关注 温馨提示:创作不易,如有转载,注明出处,感谢配合~ 目录 文章目录 Python学习日志 目录 前言 进入正题 Python学习日志12课 - 办公自动 ...

  3. Python学习日志16 - 数据库SQL查询

    Python学习日志 RBHGO的主页欢迎关注 温馨提示:创作不易,如有转载,注明出处,感谢配合~ 目录 文章目录 Python学习日志 目录 Python学习日志16课 - 数据库SQL查询 DQL ...

  4. python 学习日志(3)旋转角--改进

    python 学习日志(3)旋转角–改进 啊!都看网上说if -else非常令人头疼,今天终于感受到了: def xuan_zhuan_jiao_qiu_zhi_1_9():print(small * ...

  5. Python学习日志08 - 字典

    Python学习日志 RBHGO的主页欢迎关注 温馨提示:创作不易,如有转载,注明出处,感谢配合~ 目录 文章目录 Python学习日志 目录 Python学习日志08课 - 字典 前言 进入正题 创 ...

  6. Python学习笔记——Numpy数组的移动滑窗,使用as_strided实现

    Python学习笔记--Numpy数组的移动滑窗,使用as_strided实现 `Numpy`中移动滑窗的实现 为何需要移动滑窗 `Numpy`中的移动滑窗 移动滑窗的`as_strided`实现方法 ...

  7. Python学习日志10 - 高阶函数和高级应用

    Python学习日志 RBHGO的主页欢迎关注 温馨提示:创作不易,如有转载,注明出处,感谢配合~ 目录 文章目录 Python学习日志 目录 前言 进入正题 Python学习日志10课 - 高阶函数 ...

  8. Python学习日志04 - 列表

    Python学习日志 RBHGO的主页欢迎关注 温馨提示:创作不易,如有转载,注明出处,感谢配合~ 目录 文章目录 Python学习日志 目录 第04课:Python的容器型数据类型 进入今天的正题 ...

  9. Python学习日志 3.5

    Python学习日志 RBHGO的主页欢迎关注 温馨提示:创作不易,如有转载,注明出处,感谢配合~ 目录 文章目录 Python学习日志 目录 第3.5课:Python分支结构和循环结构的应用 例子1 ...

最新文章

  1. lattice LFE3-17EA 调试记录
  2. exception in thread main java.lang.noclassdeffounderror wrong name
  3. 2019年——欢度中秋,喜迎国庆
  4. 20210912模拟
  5. java tls 实例_grpc加密TLS初体验(go、java版本)
  6. 关于RSS技术 和应用
  7. java多线程之Semaphore信号量详解
  8. 洛谷 P1028 数的计算【递推】
  9. Python函数声明以及与其他编程语言数据类型的比较
  10. 正点原子STM32F103(精英版)------STM32时钟系统
  11. 核心内参: TDR原理及常见问题
  12. 联发科mt8516价格_揭秘联发科MT8516单颗芯片破千万背后的故事
  13. 前端文字点击出现蓝底
  14. 网络黑市规模达千亿元 信息泄露成最大安全威胁
  15. 创造与魔法java语言_创造与魔法 | 最新魔法使用大全
  16. “第十届金融工程及量化投资者年会”来啦!
  17. 入职新人如何快速了解业务
  18. 热门光学软件之初体验网络课程系列大纲5
  19. IPC(进程间通信) | 共享内存
  20. 高速数据采集卡的分类和使用方法

热门文章

  1. .NET操作Excel
  2. [Leetcode][第81题][JAVA][N皇后问题][回溯算法]
  3. [Leetcode][第1392题][JAVA][最快乐前缀][KMP][字符串编码]
  4. [Leedcode][JAVA][第837题][新21点][动态规划][数学]
  5. [剑指offer]面试题第[67]题[Leetcode][JAVA][第8题] 字符串转换整数 (atoi)[字符串]
  6. [Leedcode][JAVA][按摩师][动态规划]
  7. JSP中使用iframe导致内层网页CSS失效问题的解决方案
  8. 个人linux版本管理,浅谈各个Linux版本的个人看法
  9. xman的思维导图快捷键_一图胜千言,免费的多人协作思维导图工具,推荐收藏值得拥有哦...
  10. json java typeof_Json对象与Json字符串的转化、JSON字符串与Java对象的转换