NumPy入门(1)_数据类型

本文详细介绍了如何使用NumPy库创建各种类型的数组,包括从列表创建数组、多维数组的构造,以及如何利用NumPy内置方法高效创建大型数组。同时,文中还列举了NumPy的标准数据类型及其描述。

代码来自于《Python数据科学手册》的代码复现。
来自和鲸科技(科赛)的K-lab项目

查看版本

import numpy
numpy.__version__
'1.14.2'
time: 10.3 ms

大多数人都习惯使用np左右别名导入NumPy 例如:

import numpy as np
time: 834 µs

Python的数据类型

Python的数据类型是动态推断的,这是我认为比C语言灵活的地方。 例如:

x = 4
x = "four"

列表

L = list(range(10))
L
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
time: 2.64 ms
type(L[2])
int
time: 3.34 ms
L2 = [str( c ) for c in L] 
L2
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
time: 2.62 ms
type(L2[0])
str
time: 2.29 ms
L3 = [True, '2', 3.0, 4]
[type(item) for item in L3]
[bool, str, float, int]
time: 2.92 ms

固定数组

import array
L = list(range(10))
A = array.array('i', L)
A 
array('i', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
time: 3.11 ms

numpy包中的ndarray对象也达到该效果

从Python列表创建数组

利用np.array从Python列表创建数组: 整型数组

np.array([1, 4, 2, 5, 3])
array([1, 4, 2, 5, 3])
time: 4.02 ms

numpy要求数组必须包含同一类型的数据,若是不同则向上转换

np.array([3.14, 4, 2, 3])
array([3.14, 4.  , 2.  , 3.  ])
time: 3.02 ms

还可以设置固定的数据类型,用dtype关键字:

np.array([1, 2, 3, 4], dtype = 'float32')
array([1., 2., 3., 4.], dtype=float32)
time: 2.86 ms

numpy数组是可以多维的,下面是列表初始化多维数组的一种

嵌套列表构造的多维数组

np.array([range(i, i + 3) for i in [2, 4, 6]])
array([[2, 3, 4],
       [4, 5, 6],
       [6, 7, 8]])
time: 2.89 ms

从头创建数组

面对大型数组的时候, 利用numpy内置的方法从头创建数组是一种更搞笑的方法。一下是示例:
创建一个长度为10 的数组, 数组的值都是0

np.zeros(10, dtype = int)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
time: 2.86 ms

创建一个3 x 5的浮点数组,数组的值都是1

np.ones((3, 5), dtype = float)
array([[1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.]])
time: 2.82 ms

创建一个 3 X 5 的浮点型数组,数组的值都是3.14

np.full((3, 5), 3.14)
array([[3.14, 3.14, 3.14, 3.14, 3.14],
       [3.14, 3.14, 3.14, 3.14, 3.14],
       [3.14, 3.14, 3.14, 3.14, 3.14]])
time: 3.07 ms

创建一个线性序列数组

np.arange(0, 20, 2)
array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18])

time: 2.58 ms
创建一个5个元素的数组,这2个数均匀的分配到0~1

np.linspace(0, 1, 5)
array([0.  , 0.25, 0.5 , 0.75, 1.  ])
time: 3.11 ms

创建一个 3 X 3 的,在0~1均匀分布的随级数组组成的数组

np.random.random((3, 3))
array([[0.06894943, 0.8685184 , 0.46117051],
       [0.22624146, 0.93017847, 0.84763557],
       [0.81386909, 0.41591071, 0.94192142]])
time: 2.99 ms

创建一个3X3的,均值为0, 彼标准差为1的正态随机数组

np.random.normal(0, 1, (3, 3))
array([[ 0.84262482, -0.68791928, -0.22379997],
       [-0.13376647,  0.68875823,  0.40452055],
       [ 0.75179075, -0.08039557,  0.45733357]])
time: 3.27 ms

创建一个 3 X 3 的,[0, 10)区间随机整型数组

np.random.randint(0, 10, (3, 3))
array([[6, 7, 7],
       [5, 0, 1],
       [4, 7, 4]])
time: 3.87 ms

创建一个 3 X 3 的单位矩阵

np.eye(3)
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])
time: 3.84 ms

创建一个由3个整型数组成为初始化的数组数组的值是内存空间的任意值

np.empty(3)
array([1., 1., 1.])
time: 2.71 ms

NumPy标准数据类型

数据类型描述
bool_布尔值(真、 True 或假、False), 用一个字节存储
int_默认整型(类似于C语言中的long,通常情况下是int64或int32)
intc同C语言的int相同(通常是int32或int64)
intp用作索引的整型(和C语言的ssize _t相同,通常情况下是int32或int64)
int8字节(byte, 范围从-128到127)
int16整型(范围从-32768到32767)
int32整型(范围从-2147483648到2147483647)
int64整型(范围从-9223372036854775808到9223372036854775807)
uint8无符号整型(范围从0到255)
uint16无符号整型(范围从0到65535)
uint32无符号整型(范围从0到4294967295)
uint64无符号整型(范围从0到18446744073709551615)
float_float64的简化形式
float16半精度浮点型:符号比特位,5比特位指数(exponent), 10 比特位尾数(mantissa)
float32单精度浮点型:符号比特位,8比特位指数,23 比特位尾数
float64双精度浮点型:符号比特位,11比特位指数,52 比特位尾数
complex_complex128的简化形式
complex64复数,由两个32位浮点数表示
complex128复数,由两个64位浮点数表示
<think>好的,我现在需要处理用户关于NumPy入门教程的请求。首先,用户希望了解NumPy的基础知识和使用指南,根据系统指令,我需要确保所有行内数学表达式用$...$,独立公式用$$...$$,并且语法正确。同时回答要结构清晰,分步骤说明,还要生成相关问题。 首先,我应该回顾用户提供的引用内容。引用[1]提到了NumPy的基础知识,包括数组创建、索引、数学运算、广播、线性代数、随机数、文件操作和性能优化。引用[2]可能补充了更多示例和图解。需要确保内容覆盖这些方面,但用户主要关注的是基础入门,所以可能需要简化高级部分。 接下来,按照用户的要求,结构要清晰。可能分成几个主要部分:简介、安装、数组创建、基本操作、数学运算、广播机制、索引切片、常用函数、文件操作、性能优化等。每个部分需要简明扼要,用例子说明,特别是Python代码示例。 需要检查数学表达式是否正确使用LaTeX。比如,矩阵乘法可能涉及$A \times B$,或者更复杂的运算如点积$\mathbf{a} \cdot \mathbf{b}$。独立公式例如数组的形状公式要用$$...$$。 然后,生成相关问题。这部分需要根据内容提出常见的问题,比如安装问题、数组创建方法、广播机制的理解、性能优化技巧等。 需要注意引用标识的添加,例如在提到NumPy作为科学计算基础时,引用[^1],或者在提到图解教程时引用[^2]。但用户提供的引用只有两个,所以需要合理分配引用位置,确保自然。 还要检查代码示例是否正确,比如数组创建的例子,是否使用了正确的NumPy语法,如np.array(), np.zeros()等。代码块需要用三个反引号包裹,并标明python语言。 最后,确保回答使用中文,避免使用Markdown格式,除了代码块。整个思考过程需要流畅,覆盖用户需求,同时遵循系统指令的格式要求。</think># NumPy入门教程:基础使用指南 ## 一、NumPy简介 NumPy(Numerical Python)是Python科学计算的核心库,提供高性能的多维数组对象$ndarray$和数学运算工具。它是Pandas、SciPy等库的基础,广泛应用于数据分析、机器学习等领域。 ## 二、环境配置 ```python pip install numpy import numpy as np # 标准导入方式 ``` ## 三、核心功能详解 ### 1. 数组创建 ```python # 创建一维数组 arr1 = np.array([1, 2, 3]) # [1 2 3] # 创建二维数组 arr2 = np.array([[1,2], [3,4]]) # [[1 2] # [3 4]] # 特殊数组生成 zeros_arr = np.zeros((2,3)) # 全0数组 ones_arr = np.ones((3,2)) # 全1数组 lin_arr = np.linspace(0, 10, 5) # 等差数组 [0, 2.5, 5, 7.5, 10] ``` ### 2. 数组属性 $$shape = (m,n),\ dtype = float32$$ ```python print(arr2.shape) # 输出 (2,2) print(arr2.dtype) # 输出 int32 ``` ### 3. 数学运算 ```python a = np.array([1,2,3]) b = np.array([4,5,6]) # 向量加法 print(a + b) # [5 7 9] # 标量乘法 print(a * 3) # [3 6 9] # 点积运算 dot_product = np.dot(a, b) # 1*4 + 2*5 + 3*6 = 32 ``` ### 4. 广播机制 当数组形状不同时,NumPy自动扩展较小数组: $$(3,1) \rightarrow (3,4)$$ ```python A = np.array([[1], [2], [3]]) # shape (3,1) B = np.array([10, 20, 30, 40]) # shape (4,) A + B # 自动广播为(3,4) ``` ### 5. 索引与切片 ```python matrix = np.array([[1,2,3], [4,5,6], [7,8,9]]) # 获取第二行 row = matrix[1] # [4 5 6] # 获取第一列 col = matrix[:,0] # [1 4 7] # 布尔索引 filtered = matrix[matrix > 5] # [6 7 8 9] ``` ## 四、文件操作 ```python # 保存数组 np.save('data.npy', matrix) # 加载数组 loaded = np.load('data.npy') # CSV读写 np.savetxt('data.csv', matrix, delimiter=',') csv_data = np.loadtxt('data.csv', delimiter=',') ``` ## 五、性能优化建议 1. 尽量使用向量化操作代替循环 2. 合理选择数据类型(如float32代替float64) 3. 使用内置函数(np.sum代替循环求和) 4. 避免不必要的数组拷贝
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

之芫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值