numpy基础知识汇总

Numpy基础

Numpy的核心:ndarray对象(数组)

使用numpy.ndarray对象表示一个数组:

import numpy as np

ary = np.array([1, 2, 3, 4])

print(ary)

ary = ary * 10

print(ary)

内存中的ndarray对象

元数据(metadata)

储存对目标数组的描述信息,如dim count(维数),dimersions(维度,元组形式), dtype(数组元素的类型),date等

实际数据

完整的数组数据。(Ndarray数组是同质数组,所有元素类型相同)

将实际数据与元数据分开存放,一方面提高内存空间的使用效率,另一方面减少了对实际数据的访问频率,提高性能。

ndarray数组对象的创建

np.array(可以被解释为Numpy数组的序列)

np.arange(起始值【0】,终止值,步长【1】)

np.zeros(数组元素的个数,dtype=“数组元素类型”)

np.ones(数组元素的个数,dtype=“数组元素类型”)

ndarray对象属性的基本操作

数组的维度:array.shape

元素的类型: array.dtype

数组元素的个数: array.size

数组的索引(下标):array[0]

shape[0]页 shape[1]行 shape[2]列 三维理解,页,行,列

代码位置: D:\1902liuxuan\data_science\day01\demo04.py

ndarray属性操作详解

Numpy内置的基本数据类型

类型名 类型表示符
布尔型 bool_
有符号整型 int8(-128~127)/int16/int/32/int64
无符号整型 uint8(0~255)/uint16/uint32/uint64
浮点型 float16/float32/float64
复数型 complex64/complex128
字符串型 str_ (每个字符用32位的Unicode编码表示)

numpy自定义复合类型

五种方法

D:\1902liuxuan\data_science\day01\demo05.py

案例,在ndrray数组中存储3位学生的信息。

import numpy as np
data = [("zs", [10, 15, 2], 3),
        ("ls", [18, 16, 52], 9),
        ("ww", [85, 55, 7], 14)]
# 第一种设置dtype的方式
a = np.array(data, dtype="U2, 3int32, int32")
# U2 2个Unicode字符,一个字符是32位  3int32 表示32位整数出现3次(列表)
print(a, "zs.age:", a[0]["f2"])  # f2表示filed2,第3个字段

# 第二种设置dtype的方式
b = np.array(data, dtype=[
    ("name", "str_", 2),
    ("scroe", "int32", 3),
    ("age", "int32", 1)])
print(b, ";zs.age", b[0]["age"])

# 第三种设置dtype的方式
c = np.array(data, dtype={
    "names": ["name", "score", "age"],
    "formats": ["U2", "3int32", "int32"]})
print(c, ";ls.name:", c[1]["name"])
# 第四种设置dtype的方式
# 例如scores字段在存储时将会从第16个字节开始输出分数列表
# 数据,3int32将会占用12字节,那么age字段将会从28个字节开始
# 向后输出。
# U2占用了8个字节,虽然浪费了空间,但是这种数据存储对齐的做法
# 在数据访问时将提高了效率
d = np.array(data, dtype={
    "name": ("U2", 0),
    "scores": ("3int32", 16),
    "age": ("int32", 28)})

# 第五种设置dtype的方式
e = np.array([0x1234, 0x5678], dtype=("u2",
                                      {"lowc": ("u1", 0),
                                       "highc": ("u1", 1)
                                       }))
print("%x" % e[0])
print("%x" % e["lowc"][0])
print("%x" % e["highc"][0])

ndarray对象处理日期类型元素

astype()

from __future__ import unicode_literals
import numpy as np
f = np.array(["2018", "2019-01-01", "2019-02-01",
              "2019-01-02 01:01:01"])
f.astype("M8[D]")
# print(f)
g = f.astype("M8[M]")
# M8 日期格式
# D  day  M month  s second
print(g, ";g.dtype:", g.dtype)

h = g.astype("int32")
print(h)
print(h[2] - h[1])

D:\1902liuxuan\data_science\day01\demo06.py

类型的简写字符码

类型 字符码
bool_ ?
int8/int16/int32/int64 i1/i2/i4/i8
uint8/uint16/uint32/uint64 u1/u2/u4/u8
float16/float32/float64 f2/f4/f8
complex64/complex128 c8/c16
str_ U<字符数>
datetime64 M8[Y]/[M]/[D]/[h]/[m]/[s]

ndarray数组对象的维度操作

视图变维:(数据共享)原始数据未变 array.reshape() array.ravel()

import numpy as np
a = np.arange(1, 9)
# 视图变维使用的还是原始数组中的数据
b = a.reshape((2, 4))
print(a)
print(b)
a[0] = 999
print(b)
b[0][0] = 888
print(b)
print(a)
c = b.ravel()
print(c)

复制变维(数据独立):生成新数据 flatten()

d = b.flatten()
print(d)
d[0] = 777
print(b)

就地变维:直接使用shape属性修改数组维度,不返回新数组。a.shape a.resize()

d.shape = (2, 4)
print(d)
d.resize(2, 2, 2)
print(d)

ndarray数组的切片操作

多维数组拿逗号拆分

# 数组的切片与列表切片参数类似
array[起始位置:终止位置:步长]
a.resize(3, 3, 3)
print(a)
print(a[0:2, :, 2:3])

ndarray数组的掩码操作

any() 两个数组或运算

all() 两个数组与运算

# ndarray 对象的而掩码操作
a = np.array([1, 2, 3, 4, 5, 6, 7, 8])
f = np.array([True, False, True, False,
              True, False, True, False, ])
print(a[f])
print(a[a > 3])

# 找1-100中3的倍数或7的倍数打印出来
a = np.arange(1, 100)
flag_a = a % 3 == 0
flag_b = a % 7 == 0
flag = np.any([flag_a, flag_b], axis=0)
flag_all = np.all([flag_a, flag_b], axis=0)
print(flag)
print(a[flag])
print(a[flag_all])

多维数组的组合与拆分

垂直方向的操作:vstack() vsplit()

水平方向操作:hstack() hsplit()

深度方向操作(理解为组合后从上面看):dstack() dsplit()

import numpy as np
a = np.arange(1, 7).reshape(2, 3)
# [1,2,3,4,5,6]
b = np.arange(7, 13).reshape(2, 3)
# [7,8,9,10,11,12]
# 垂直方向操作
c = np.vstack((a, b))
print(c)
a, b = np.vsplit(c, 2)  # 2的意思是拆成2份
print(a, "\n", b)
# 水平方向操作
d = np.hstack((a, b))
print(d)
a, b = np.hsplit(d, 2)
print(a, "\n", b)
# 深度方向操作
# print("深度操作")
e = np.dstack((a, b))
print(e)
a, b = np.dsplit(e, 2)
print(a, "\n", b)

多维数组组合与拆分的相关函数:

根据axis所指向的轴向(0,1,2)进行多维数组的组合

如果待组合的两个数组都是二维数组:axis=0代表垂直方向,axis=1代表水平方向

如果待组合的两个数组都是三维数组:axis=0代表垂直方向,axis=1代表水平方向,axis=3代表深度方向

c = np.concatenate((a,b),axis=0)

np.split(c, 2, axis=0)

通过给定的axis轴向与拆分的份数对c数组进行拆分

a = a.reshape(2, 3)
b = b.reshape(2, 3)
c = np.concatenate((a, b), axis=1)
print(c)

长度不等的两个数组的组合操作

np.pad(ary, pad_width=(0, 1), mode=“constant”, constant_values = -1)

np.pad(
	ary, 				#原始数组
	pad_width=(0, 1),	#补全方式(头补0个,尾补1个)
    mode="constant", 	#设置补全模式为constant
    constant_values = -1	#设置补全的默认值为-1
    )
    
a = np.arange(1, 7)
b = np.arange(11, 16)
c = np.pad(b, pad_width=(0, 1), mode="constant", constant_values=-1)
print(a)
print(b)
print(c)
d = np.vstack((a, c))
print(d)

中间插入 insert()

末尾追加 append()

简单的一维数组组合方案

np.row_stack((a, b))

np.column_stack((a, b))

a = np.arange(1, 10)
b = np.arange(11, 20)
# 把a与b摞在一起成为两行
c = np.row_stack((a, b))
# 把a与b并在一起成为两列
d = np.column_stack((a, b))
print(c)
print(d)

numpy数组的其他属性

shape 维度
dtype 元素类型
size 数组元素的个数
ndim 维数
itemsize 元素字节数
nbytes 数组总字节数
real 复数数组的实部
imag 复数数组的虚部
T 数组对象的转置视图(行列互换效果)
flat 返回数组的扁平迭代器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值