数据分析之Numpy库的使用

Numpy基本用法

NumPy ndarray 对象

- numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
- 参数说明
    名称	    描述P
    object	数组或嵌套的数列
    dtype	数组元素的数据类型,可选
    copy	对象是否需要复制,可选
    order	创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
    subok	默认返回一个与基类类型一致的数组
    ndmin	指定生成数组的最小维度
- 实例
    import numpy as np
    arr = np.array([[1,2,3],[4,5,6],[7,8,9]],namin=3,dtype=complex)
    print(arr)

NumPy数据类型

- 常用数据类型
    名称	    描述
    bool_	布尔型数据类型(True 或者 False)
    int_	默认的整数类型(类似于 C 语言中的 long,int32 或 int64)
    intc	与 C 的 int 类型一样,一般是 int32 或 int 64
    intp	用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64)
    int8	字节(-128 to 127)
    int16	整数(-32768 to 32767)
    int32	整数(-2147483648 to 2147483647)
    int64	整数(-9223372036854775808 to 9223372036854775807)
    uint8	无符号整数(0 to 255)
    uint16	无符号整数(0 to 65535)
    uint32	无符号整数(0 to 4294967295)
    uint64	无符号整数(0 to 18446744073709551615)
    float_	float64 类型的简写
    float16	半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位
    float32	单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位
    float64	双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位
    complex_	complex128 类型的简写,即 128 位复数
    complex64	复数,表示双 32 位浮点数(实数部分和虚数部分)
    complex128	复数,表示双 64 位浮点数(实数部分和虚数部分)
- 数据类型对象
    numpy.dtype(object, align, copy)
- 参数说明
    object   要转换为的数据类型对象
    align    如果为 true,填充字段使其类似 C 的结构体。
    copy     复制 dtype 对象 ,如果为 false,则是对内置数据类型对象的引用
- ex:
    import numpy as np
    student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')]) 
    a = np.array([('abc', 21, 50),('xyz', 18, 75)], dtype = student) 
    print(a)

NumPy 数组属性

- NumPy的数组中比较重要的对象属性
    ndarray.ndim	秩,即轴的数量或维度的数量
    ndarray.shape	数组的维度,对于矩阵,n 行 m 列
    ndarray.size	数组元素的总个数,相当于 .shape 中 n*m 的值
    ndarray.dtype	ndarray 对象的元素类型
    ndarray.itemsize	ndarray 对象中每个元素的大小,以字节为单位
    ndarray.flags	ndarray 对象的内存信息
    ndarray.real	ndarray元素的实部
    ndarray.imag	ndarray 元素的虚部
    ndarray.data	包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。

NumPy 数组属性的使用

ndarray.ndim 用于返回数组的维数,等于秩.
- ex1   (ndarray.ndmin)
    import numpy as np
    arr_0 = np.arange(24)
    print(arr.ndmin)    # arr现在只有一个维度
    arr_1 = arr_0.reshape(2,4,3)
    print(att_1)
    print(arr_1.ndmin)
ndarray.shape 表示数组的维度,返回一个元组,这个元组的长度就是维度的数目,即 ndim 属性(秩).比如,一个二维数组,其维度表示"行数"和"列数".
- ndarray.shape 也可以用于调整数组大小.
    - ex2   (ndarray.shape)
        import numpy as np
        arr = np.array([[1,2,3],[4,5,6]])
        print(arr.shape)

        - out:(2, 3)
numpy.itemsize
- ndarray.itemsize 以字节的形式返回数组中每一个元素的大小.
    - ex3
        import numpy as np
        # 数组的 dtype 为 int8(一个字节)
        x = np.array([1,2,3,4,5], dtype = np.int8)
        print (x.itemsize)

        # 数组的 dtype 现在为 float64(八个字节)
        y = np.array([1,2,3,4,5], dtype = np.float64)
        print (y.itemsize)

        out: 1
             8
ndarray.flags
- ndarray.flags 返回 ndarray 对象的内存信息,包含以下属性
    C_CONTIGUOUS (C)	数据是在一个单一的C风格的连续段中
    F_CONTIGUOUS (F)	数据是在一个单一的Fortran风格的连续段中
    OWNDATA (O)	        数组拥有它所使用的内存或从另一个对象中借用它
    WRITEABLE (W)	    数据区域可以被写入,将该值设置为 False,则数据为只读
    ALIGNED (A)	        数据和所有元素都适当地对齐到硬件上
    UPDATEIFCOPY (U)	这个数组是其它数组的一个副本,当这个数组被释放时,原数组的内容将被更新

    -ex4
        import numpy as np
        arr = np.array([1,2,3,4,5])
        print(arr.flags)

    -out: C_CONTIGUOUS : True
          F_CONTIGUOUS : True
          OWNDATA : True
          WRITEABLE : True
          ALIGNED : True
          WRITEBACKIFCOPY : False
          UPDATEIFCOPY : False

NumPy 数组的简单操作

创建数组的几种特殊方式
- arr = np.empty([3,2],dtype=int64, order='C')
- arr = np.zeros([2,2],dtype=int)
- arr = np.ones([2,2],dtype=int)
- arr = np.eye(3)
- arr = np.full([2,2],8)    生成两行两列元素全为8的数组
numpy.random
- numpy.random.random(2,3)
- numpy.random.randint(1,10,size=(2,3))
numpy.empty
numpy.empty(shape, dtype, order)
- 参数说明
    shape	数组形状
    dtype	数据类型,可选
    order	有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。
   
ex:
    import numpy as np
    arr = numpy.empty([3,2], dtype=int64, order='C')
    print(arr)
numpy.zeros
ex:
    import numpy as np

    # 默认为浮点数
    x = np.zeros(5) 
    print(x)
     
    # 设置类型为整数
    y = np.zeros((5,), dtype = np.int) 
    print(y)
     
    # 自定义类型
    z = np.zeros((2,2), dtype = [('x', 'i4'), ('y', 'i4')])  
    print(z)
numpy.ones(同上)
import numpy as np
arr = np.ones([2,2],dtype=int)
print(arr)

数组索引与切片

一维数组
import numpy as np

a = np.arange(1,10)
print(a)
# 索引操作
print(a[4])
# 切片
print(a[4,6])
# 步长
print(a[::2])
# 复数索引
print(a[-1])
多维数组
通过中括号来索引和切片,中括号内部如果有两个值,并且用逗号隔开,则代表几行几列,即索引某一元素所在的相对位置
如果多维数组中只有一个值,则代表行
import numpy as np

a = np.random.randint(1, 10, size=(3, 4))
print(a)
# 一行三列的数据
print(a[1, 3])
# 第二行与第三行数据
print(a[[1, 2]])
print()
# 第零行数据
print(a[0])
# 获取数据不连续时,代表分别获取第零行第二列,和第一行第三列的数据
print(a[[0,1],[2,3]])
print()
# 表示获取第零行和第一行的第一列和第二列数据
print(a[0:2,1:3])
# 获取某一列的数据,表示获取第一列的数据
print(a[:,1])
# 布尔索引  | & ! < = > 等等
print(a[(a>3) & (a<7)])
数组元素的替换,有索引替换,条件替换和where替换
import numpy as np

a = np.random.randint(1, 10, size=(3, 4))
print(a)
# 第零行元素替换为[1,2,3,4]
a[0] = np.array([1, 2, 3, 4])
print(a)
# a数组中小于五的元素替换为零
a[a < 5] = 0
print(a)
# a数组中小于五的元素替换为零,其余替换为1
b = np.where(a < 5, 0, 1)
print(b)

数组的运算

1.数组和数组运算,若其形状相同,则可进行加减乘除运算
2.若其形状不同且行数和列数不等于1 不能进行运算
3.若其中一方的行数或列数相等,且有一方的另外的行或者列等于1,则可以进行运算
4.若双方的行或者列均为1, 则可以进行运算

reshape 和 resize ,flatten 和 ravel 方法

flatten and ravel
    comment:
        不会改变数值,知识将数组换成一维
    different:
        flatten不会与数组产生依赖关系
        ravel则会想指针一样与数组产生依赖关系,可以对一维数组改变
reshape and resize
    comment:
        都会改变数组的值
    different:
        reshape形成了新的数组
        resize则是在原来数组的基础上直接改动,替换了原来的数组

不同数组的组合

叠加方式

####1.vstack:垂直叠加,列相同
a = np.random.randint(1, 10, size=(2, 4))
b = np.random.randint(1,10, size=(3,4))
c = np.vstack([a, b])
print©
####2.hstack:水平叠加,行相同
a = np.random.randint(1, 10, size=(2, 4))
b = np.random.randint(1,10, size=(3,4))
c = np.hstack([a, b])
print©
####3.concatenate(arr1,arr2,axis):当axis=0时,垂直叠加; 当axis=1时,水平叠加
a = np.random.randint(1, 10, size=(2, 4))
b = np.random.randint(1,10, size=(3,4))
c = np.concatenate(a, b,axis=0)
print©

切割方式

####1.vsplit:垂直切割
a = np.random.randint(1,10,size=(4,6))
b = np.vsplit(a,2)
c = np.vsplit(a,(0,2))
####2.hspilt:水平切割
a = np.random.randint(1,10,size=(4,6))
b = np.hsplit(a,2)
c = np.hsplit(a,(0,2))
####3. np.split(arr,indicate_or_seciont,axis) axis=0,垂直切割; axis=1,水平切割
# arr数组在水平方向平均分成三份
a = np.random.randint(arr,3,axis=1)

读取和存入csv文件

np.savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='\n', header='', footer='', comments='# ', encoding=None)
参数说明
fname:文件名
X:要保存的数组
fmt:数据格式
delimiter:分隔符,默认是空格,可以使用都好作为分隔符
newline:分割行的字符串或字符
header:文件第一行内容
footer:写入文件末尾的字符串
comments: 默认作为空字符串
encoding:保存格式
一般需要的几个参数:fname,X,fmt,delimiter,header,comments


np.loadtxt(fname, dtype=<class 'float'>, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, 
unpack=False, ndmin=0, encoding='bytes', max_rows=None, *, like=None)
常用参数说明
fname:文件名
dtype:文件类型,int,float,double等
comments:一般使用空字符串
delimiter:分隔符
skipnows:省略第几行
unpack:默认false, 如果为True,则是数组的转置

np.savetxt and np.loadtxt 都只能加载或保存一维或二维数组,不能保存三维及其以上数组

np.save(file, arr, allow_pickle=True, fix_imports=True)
参数说明
file:文件名,保存的是npy文件,保存时不用加npy
arr:数组

load(file, mmap_mode=None, allow_pickle=False, fix_imports=True, encoding='ASCII')
参数说明
file:文件名,需要加后缀 其余参数一般不变

普通读取csv的方式

with open(fname,'r') as fp:
reader = csv.reader(fp)
# 不读取第一行内容
next(reader)
for x in reader:
    print(x)

# 只用DictReader方法读取,是字典形式
with open(fname,'r') as fp:
# reader迭代器,使用DictReader时不包含第一行,直接以字典形式输出
reader = csv.DictReader(fp)
for x in reader:
    print(x)
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值