numpy的使用(一)

在学python的过程中会发现,numpy用的非常多,因此针对这个库中的一些方法做了点小笔记,并不全面,且大多内容参考自其他博客内容。

本文的大部分代码来自:给深度学习入门者的Python快速教程 - numpy和Matplotlib篇,结合文中的代码进行了学习,在有些地方不太理解,因此也参考了其他资料做了简要补充说明。


1、array(数组)

是numpy中最基本的数据结构,利用array函数可以非常方便的创建多种类型的数组,并且可以是多维数组。

https://blog.csdn.net/qq_36076233/article/details/70308618
NumPy数组的维数称为(rank),一维数组的秩为1,二维数组的秩为2,以此类推。在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量。比如说,二维数组相当于是一个一维数组,而这个一维数组中每个元素又是一个一维数组。所以这个一维数组就是NumPy中的轴(axes),而轴的数量——秩,就是数组的维数。
Numpy库中的矩阵模块为ndarray对象,有很多属性:T,data, dtype, flags, flat, imag, real, size, itemsize, nbytes, ndim, shape, strides, ctypes, base等等。

import numpy as np
a = [1, 2, 3, 4]            #普通的定义数组方法
b = np.array(a)             # array([1, 2, 3, 4])
type(b)                     # <type 'numpy.ndarray'>

1、https://blog.csdn.net/scorpion_zs/article/details/52526310
ndarray对象是用于存放同类型元素的多维数组,是numpy中的基本对象之一,另一个是func对象。
2、https://blog.csdn.net/norsd/article/details/76780310
简单说 numpy.array(…) 作为一个函数, 他返回numpy.ndarray这个class
与numpy.array这个函数同类型的有:
numpy.array
numpy.zeros
numpy.empty


2、ndarray.shape

shape是ndarray的一个成员变量,表示数组的每个方向上的维度。
a.shape是通过访问矩阵类的成员变量的shape值;
a.shape()是通过调用矩阵类的成员函数的到shape值;
两者返回的结果相同,都是一个tuple类型,表示数组的维度。

例如:

b.shape     #(4,)               

b.shape返回一个数组维度的元组,结果表示b是一个一维数组,数组中有4个元素。
又如:

bb=np.array([[1],[2]]) 
bb.shape  #(2,1

结果(2,1)表示c是一个二维数组,每个数组中有一个元素。


注意:
(4,)表示一维数组,4个元素
(2,3)表示二维数组,每维3个元素


3、np.ndarray的size

np.ndarray的size 结果表示数组所有元素的个数(包括所有维度);

c = [[1, 2], [3, 4]]        # 二维列表
d = np.array(c)             # 二维numpy数组
d.shape                     # (2, 2) 二维数组,每维度两个元素
d.size                      # 4 表示数组所有元素的个数(包括所有维度)

4、np.max与np.maximum

(转载自https://blog.csdn.net/lanchunhui/article/details/52700895)

(1)参数部分:

  • np.max:(a, axis=None, out=None, keepdims=False)
    求序列的最值
    最少接收一个参数
    axis:默认为列向(也即 axis=0),axis = 1 时为行方向的最值;
  • np.maximum:(X, Y, out=None)
    X 与 Y 逐位比较取其大者;
    最少接收两个参数

(2)使用上:

np.max([-2, -1, 0, 1, 2])    #2

np.maximum([-2, -1, 0, 1, 2], 0)   #array([0, 0, 0, 1, 2])  注意!!!
# 当然 np.maximum 接受的两个参数,也可以大小一致
# 或者更为准确地说,第二个参数只是一个单独的值时,其实是用到了维度的 broadcast 机制;

同时max还可以指定某个维度:

#(1,2)
#(3,4)
#第一列是1,3,第二列是2,4;
#第一行是1,2,第二行是3,4;
d.max(axis=0)   # axis=0表示列,array([3, 4]) 
                #【因max(1,3)=3;max(2,4)=4】

d.max(axis=1)   # axis=1表示行,array([2, 4])
                #【因max(1,2)=2;max(3,4)=4】

d.mean(axis=0)  # 列的均值,array([ 2.,  3.])
                #【因mean(1,3)=2;mean(2,4)=3】

其它:

b.argmax()                  # 3 返回数组中最大值的坐标
b.max()                     # 4  最大值
b.mean()                    # 2.5 均值

5、numpy.flatten()和numpy.ravel()

(参考:https://blog.csdn.net/lanchunhui/article/details/50354978
二者的功能都是将多维数组降成一位数组。区别在于:numpy.faltten()返回一份拷贝,对拷贝所做的修改不会影响原始数据,而numpy.ravel返回视图,改变后会同时修改原始矩阵

d.flatten()   # 展开一个numpy数组为1维数组,array([1, 2, 3, 4])
np.ravel(c)   # 展开一个可以解析的结构为1维数组,array([1, 2, 3, 4])

6、numpy.ones()和numpy.repeat()

numpy.ones()生成值为全1的数组;
numpy.repeat()

# 3x3的浮点型2维数组,并且初始化所有元素值为1
e = np.ones((3, 3), dtype=np.float)
#结果:array([[1., 1., 1.],
             [1., 1., 1.],
             [1., 1., 1.]])
# 创建一个一维数组,元素值是把3重复4次
f = np.repeat(3, 4)    #结果: array([3, 3, 3, 3])

7、np.zeros()

(参考: https://blog.csdn.net/qq_26948675/article/details/54318917
用法:zeros(shape, dtype=float, order=’C’)
(1)shape可指定形状(维度和元素个数);
(2)dtype:数据类型,可选择不同参数,默认是numpy.float64;

  • dtype数据类型:
    • t ,位域,如t4代表4位
    • b,布尔值,true or false
    • u,无符号整数,u8(64位)
    • f,浮点数,f8(64位)
    • c,浮点负数,
    • o,对象,
    • s,a,字符串,s24
    • u,unicode,u24

(3)order:可选参数,c代表与c语言类似,行优先;F代表列优先。

#1、生成一维3列的浮点型(numpy.float64)型零数组
np.zeros(3)   #array([0.,0.,0.]) 默认是浮点型零数组
#2、生成一维3列的整型零数组
np.zeros((3),dtype=np.int)   #array([0,0,0]) 
#3、生成23列的零数组
t=(2,3)
np.zeros(t)
#结果是 array([[0., 0., 0.],
              [0., 0., 0.]]) 二维,每维3个元素
#4、生成12列的数组
np.zeros((2,), dtype=[('x', 'i4'), ('y', 'i4')]) 
#结果是 array([(0, 0), (0, 0)],dtype=[('x', '<i4'), ('y', '<i4')])

4的结果: array([(0, 0), (0, 0)],dtype=[('x', '<i4'), ('y', '<i4')])
对比分析: np.zeros(2,) 的结果是 array([0., 0.])

!注意:第4个例子:“(2,)”,表示生成的是一个1维数组,包括2个元素。dtype的参数含义为:每一个元素包括2个值:x和y,并且x和y的类型都是8位整数(i表示整数,i4表示2^4=8),因为#4指定了x和y,所以最后的数组每个元素里面包括两个值。

4中的dtype后面若是再加一个z,则生成数组会变成每个元素包括三个值
np.zeros((2,), dtype=[(‘x’, ‘i4’), (‘y’, ‘i4’), (‘z’, ‘i4’)])
结果是: [(0, 0, 0) (0, 0, 0)], dtype=[(‘x’, ‘i4’), (‘y’, ‘i4’), (‘z’, ‘i4’)])


8、np.save和np.load(文件读取)

#代码来自:numpy教程:基本输入输出和文件输入输出Input and output
(https://blog.csdn.net/pipisorry/article/details/39088003)


>>> a = np.arange(8)
>>> b = np.add.accumulate(a)
>>> c = a + b
>>> f = file("result.npy", "wb")
>>> np.save(f, a) # 顺序将a,b,c保存进文件对象f
>>> np.save(f, b)
>>> np.save(f, c)
>>> f.close()
>>> f = file("result.npy", "rb")
>>> np.load(f) # 顺序从文件对象f中读取内容
array([0, 1, 2, 3, 4, 5, 6, 7])
>>> np.load(f)
array([ 0,  1,  3,  6, 10, 15, 21, 28])
>>> np.load(f)
array([ 0,  2,  5,  9, 14, 20, 27, 35])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值