ndarray
对象
NumPy定义了一个**n**
维数组对象,简称为ndarray
对象。
- 数组中的每个元素都占有相同大小的内存(类型统一),可通过索引或切片的方式获取每个元素。
创建
通过Numpy的内置函数ndarray
对象**array()**
创建**ndarray**
对象。 ```python numpy.array(object, dtype = None, copy = True, order = None,ndmin = 0)
其中:
- object:表示一个数组序列;
- dtype:可选参数,更改数组的数据类型;
- copy:可选参数,表示数组是否被复制,默认是True;
- order:以那种内存布局创建数组: “C”:行序列; “F”:列序列; “A”:默认。
- ndim:用于指定数组的维度。
```
创建一维数组
```python import numpy
a=numpy.array([1,2,3]) # 使用列表构建一维数组 print(a)
<a name="reeSs"></a>
### 创建多维数组
```python
import numpy
b=numpy.array([[1,2,3],[4,5,6]])
c=numpy.array([2,4,6,8],dtype="complex") # 修改数组的数据类型为complex
print(b)
print(c)
ndim
查看/创建数组维数
查看数组维度
import numpy as np
arr = np.array([[1, 2, 3, 4], [4, 5, 6, 7], [9, 10, 11, 23]])
print(arr.ndim) # 2
创建数组维度
import numpy as np
a = np.array([1, 2, 3,4,5], ndim = 2)
print(a) # [[1 2 3 4 5]] 二维数组
reshape
数组变维
数组的形状指的是多维数组的行数和列数,reshape()
函数可以改变多维数组行数和列数。reshape()
函数可以接受一个元组作为参数,用于指定新数组的行列数。
import numpy as np
e = np.array([[1,2],[3,4],[5,6]])
print("原数组",e)
e=e.reshape(2,3)
print("新数组",e)
Numpy数据类型
数据类型表
序号 | 数据类型 | 语言描述 |
---|---|---|
1 | bool_ | 布尔型数据类型(True 或者 False) |
2 | int_ | 默认整数类型,类似于 C 语言中的 long,取值为 int32 或 int64 |
3 | intc | 和 C 语言的 int 类型一样,一般是 int32 或 int 64 |
4 | intp | 用于索引的整数类型(类似于 C 的 ssize_t,通常为 int32 或 int64) |
5 | int8 | 代表与1字节相同的8位整数。值的范围是-128到127。缩写:”i1”。 |
6 | int16 | 代表 2 字节(16位)的整数。范围是-32768至32767。缩写:”i2”。 |
7 | int32 | 代表 4 字节(32位)整数。范围是-2147483648至2147483647。缩写:”i3”。 |
8 | int64 | 表示 8 字节(64位)整数。范围是-9223372036854775808至9223372036854775807。缩写:”i4”。 |
9 | uint8 | 代表1字节(8位)无符号整数。 |
10 | uint16 | 2 字节(16位)无符号整数。 |
11 | uint32 | 4 字节(32位)的无符号整数。 |
12 | uint64 | 8 字节(64位)的无符号整数。 |
13 | float_ | float64 类型的简写。 |
14 | float16 | 半精度浮点数,包括:1 个符号位,5 个指数位,10个尾数位。 |
15 | float32 | 单精度浮点数,包括:1 个符号位,8 个指数位,23个尾数位。 |
16 | float64 | 双精度浮点数,包括:1 个符号位,11 个指数位,52个尾数位。 |
17 | complex_ | 复数类型,与 complex128 类型相同。 |
18 | complex64 | 表示实部和虚部共享 32 位的复数。 |
19 | complex128 | 表示实部和虚部共享 64 位的复数。 |
20 | str_ | 表示字符串类型 |
21 | string_ | 表示字节串类型 |
数据类型对象
数据类型对象(Data Type Object),又称dtype
对象,主要用来描述数组元素的数据类型、大小以及字节顺序。
# 语法:
np.dtype(object)
# 创建一个dtype对象:
import numpy as np
a= np.dtype(np.int64)
print(a) # int64
数据类型标识码
字符 | 对应类型 |
---|---|
b | 代表布尔型 |
i | 带符号整型 |
u | 无符号整型 |
f | 浮点型 |
c | 复数浮点型 |
m | 时间间隔(timedelta) |
M | datatime(日期时间) |
O | Python对象 |
S,a | 字节串(S)与字符串(a) |
U | Unicode |
V | 原始数据(void) |
定义结构化数据(自定义数据结构)
结构化数据,使用字段的形式来描述某个对象的特征。用在**ndarray**
的**dtype**
参数。
import numpy as np
teacher = np.dtype([('name','S20'), ('age', 'i1'), ('salary', 'f4')])
#输出结构化数据teacher
print(teacher)
#将其应用于ndarray对象
b = np.array([('ycs', 32, 6357.50),('jxe', 28, 6856.80)], dtype = teacher)
print(b) # 输出的name为bytes字节串类型
print(b['salary']) # [6357.5 6856.8] 可通过下标索引(字段名)查询字段的值
数组的常用属性
ndarray.shape
shape
属性的返回值是一个由数组维度构成的元组。
import numpy as np
a = np.array([[2,4,6],[3,5,7]])
print(a.shape) # (2,3)
# 通过 shape 属性修改数组的形状大小
a.shape = (3,2)
print(a)
# print结果如下:
"""
[[1 2]
[3 4]
[5 6]]
"""
ndarray.reshape()
NumPy 还提供了一个调整数组形状的 reshape()
函数。
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
b = a.reshape(3,2)
print(b)
# print结果如下:
"""
[[1 2]
[3 4]
[5 6]]
"""
ndarray.ndim
该属性返回的是数组的维数。
import numpy as np
#随机生成一个一维数组
c = np.arange(24)
print(c)
print(c.ndim) # 1
#对数组进行变维操作
e = c.reshape(2,4,3)
print(e)
print(e.ndim) # 3
ndarray.itemsize
返回数组中每个元素的类型大小(以字节为单位)。
import numpy as np
x = np.array([1,2,3,4,5], dtype = np.int8)
print (x.itemsize) # 1,数据类型为int8,代表1字节
ndarray.flags
返回 **ndarray**
数组的内存信息,比如 ndarray
数组的存储方式,以及是否是其他数组的副本等。
import numpy as np
x = np.array([1,2,3,4,5])
print (x.flags)
创建数组(除array()
外的方法)
numpy.empty()
numpy.empty()
创建未初始化的数组。
numpy.empty(shape, dtype = float, order = 'C')
其中:
* shape:指定数组的形状,以元组的方式传参;
* dtype:数组元素的数据类型,默认值是值 float;
* order:指数组元素在计算机内存中的储存顺序,默认顺序是“C”(行优先顺序)。
import numpy as np
arr = np.empty((3,2), dtype = int)
print(arr) # 数组中存的是随机值
numpy.zeros()
该函数用来创建元素均为**0**
的数组。
numpy.zeros(shape, dtype=float, order="C")
numpy.ones()
该函数用来创建元素均为**1**
的数组。
numpy.ones(shape, dtype = None, order = 'C')
numpy.asarray()
asarray()
与array()
类似,但它比array()
更为简单。**asarray()**
能够把一个Python序列(列表或元组)转换成**ndarray**
对象。
numpy.asarray(sequence,dtype = None ,order = None )
其中:
* sequence:接收的是一个Python序列,可以是列表或元组;
* dtype:可选参数,数组的数据类型;
* order:数组内存布局方式,"C"或"F"。
示例
import numpy as np
l=[1,2,3,4,5,6,7]
a = np.asarray(l)
print(type(a)) # <class 'numpy.ndarray'>
print(a) # [1 2 3 4 5 6 7]
numpy.frombuffer()
表示使用指定的缓冲区创建数组。
numpy.frombuffer(buffer, dtype = float, count = -1, offset = 0)
其中:
* buffer:将任意对象转换为流的形式读入缓冲区;
* dtype:返回数组的数据类型,默认是 float32;
* count:要读取的数据数量,默认为-1,表示读取所有数据;
* offset:读取数据的起始位置,默认为 0。
示例
import numpy as np
#字节串类型
l = b'hello world' # b 表示以字节流的方式存储
print(type(l))
a = np.frombuffer(l, dtype = "S1")
print(a)
print(type(a))
numpy.fromiter()
该方法可将迭代对象转换成**ndarray**
数组,其返回值是一个一维数组。
numpy.fromiter(iterable, dtype, count = -1)
其中:
* iterable:可迭代对象;
* dtype:返回数组的数据类型;
* count:读取的数据数量,默认为-1,表示读取所有数据。
示例
import numpy as np
# 使用 range 函数创建列表对象
list=range(6)
#生成可迭代对象i
i=iter(list)
#使用i迭代器,通过fromiter方法创建ndarray
array=np.fromiter(i, dtype=float)
print(array)
创建区间数组
区间数组
所谓区间数组,指的是数组元素的取值位于某个范围内,并且数组元素之间可能会呈现某种规律,如数列、递增或递减等。
创建区间数组
numpy.arange()
可以使用arange()
来创建给定数值范围的数组,用法与Python的range()
方法类似。
numpy.arange(start, stop, step, dtype)
其中:
* start:起始值,默认从0开始;
* stop:终止值,生成的数组元素值不包含终止值;
* step:步长,默认是1;
* dtype:可选参数,指定ndarray数组的数据类型。
numpy.linspace()
表示在指定的数值区间内,返回均匀间隔的一维等差数组,默认均分50份。
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
其中:
* start:起始值;
* stop:终止值;
* num:表示数值区间内要生成多少个均匀的样本,默认值是50;
* endpoint:默认为True,表示数列包含终止值,反之不包含;
* retstep:默认为False,表示生成的数组中会不显示公差项,反之显示;
* dtype:代表数组元素值的数据类型,默认为float。
示例
# 常规默认参数示例:
import numpy as np
#生成10个样本
a = np.linspace(1,10,10) # 默认包含终止值
print(a) # [ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]
# 带retstep参数示例:
import numpy as np
x = np.linspace(1,2,5, retstep = True)
print(x) # (array([1. , 1.25, 1.5 , 1.75, 2. ]), 0.25)
numpy.logspace()
该函数同样返回一个ndarray
数组,用于创建对数等分数组。
np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
其中:
* start:序列的起始值为base**start,即base的start次方;
* stop:序列的终止值为base**stop;
* num:数值范围内的样本数量,默认是50;
* endpoint:默认为True,表示数列包含终止值,反之不包含;
* base:对数函数的log底数,默认是10;
* dtype:代表数组元素值的数据类型,默认为float。
示例
import numpy as np
a = np.logspace(1,10,num = 10, base = 2)
print(a) # [ 2. 4. 8. 16. 32. 64. 128. 256. 512. 1024.]