ndarray对象

NumPy定义了一个**n**维数组对象,简称为ndarray对象。

  • 数组中的每个元素都占有相同大小的内存(类型统一),可通过索引或切片的方式获取每个元素

    创建ndarray对象

    通过Numpy的内置函数**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)

  1. <a name="reeSs"></a>
  2. ### 创建多维数组
  3. ```python
  4. import numpy
  5. b=numpy.array([[1,2,3],[4,5,6]])
  6. c=numpy.array([2,4,6,8],dtype="complex") # 修改数组的数据类型为complex
  7. print(b)
  8. print(c)

ndim查看/创建数组维数

查看数组维度

  1. import numpy as np
  2. arr = np.array([[1, 2, 3, 4], [4, 5, 6, 7], [9, 10, 11, 23]])
  3. print(arr.ndim) # 2

创建数组维度

  1. import numpy as np
  2. a = np.array([1, 2, 3,4,5], ndim = 2)
  3. print(a) # [[1 2 3 4 5]] 二维数组

reshape数组变维

数组的形状指的是多维数组的行数和列数reshape()函数可以改变多维数组行数和列数
image.png
reshape()函数可以接受一个元组作为参数,用于指定新数组的行列数

  1. import numpy as np
  2. e = np.array([[1,2],[3,4],[5,6]])
  3. print("原数组",e)
  4. e=e.reshape(2,3)
  5. 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对象,主要用来描述数组元素的数据类型、大小以及字节顺序

  1. # 语法:
  2. np.dtype(object)
  3. # 创建一个dtype对象:
  4. import numpy as np
  5. a= np.dtype(np.int64)
  6. print(a) # int64

数据类型标识码

字符 对应类型
b 代表布尔型
i 带符号整型
u 无符号整型
f 浮点型
c 复数浮点型
m 时间间隔(timedelta)
M datatime(日期时间)
O Python对象
S,a 字节串(S)与字符串(a)
U Unicode
V 原始数据(void)

定义结构化数据(自定义数据结构)

结构化数据,使用字段的形式来描述某个对象的特征用在**ndarray****dtype**参数

  1. import numpy as np
  2. teacher = np.dtype([('name','S20'), ('age', 'i1'), ('salary', 'f4')])
  3. #输出结构化数据teacher
  4. print(teacher)
  5. #将其应用于ndarray对象
  6. b = np.array([('ycs', 32, 6357.50),('jxe', 28, 6856.80)], dtype = teacher)
  7. print(b) # 输出的name为bytes字节串类型
  8. print(b['salary']) # [6357.5 6856.8] 可通过下标索引(字段名)查询字段的值

数组的常用属性

ndarray.shape

shape属性的返回值是一个由数组维度构成的元组

  1. import numpy as np
  2. a = np.array([[2,4,6],[3,5,7]])
  3. print(a.shape) # (2,3)
  4. # 通过 shape 属性修改数组的形状大小
  5. a.shape = (3,2)
  6. print(a)
  7. # print结果如下:
  8. """
  9. [[1 2]
  10. [3 4]
  11. [5 6]]
  12. """

ndarray.reshape()

NumPy 还提供了一个调整数组形状的 reshape() 函数。

  1. import numpy as np
  2. a = np.array([[1,2,3],[4,5,6]])
  3. b = a.reshape(3,2)
  4. print(b)
  5. # print结果如下:
  6. """
  7. [[1 2]
  8. [3 4]
  9. [5 6]]
  10. """

ndarray.ndim

该属性返回的是数组的维数

  1. import numpy as np
  2. #随机生成一个一维数组
  3. c = np.arange(24)
  4. print(c)
  5. print(c.ndim) # 1
  6. #对数组进行变维操作
  7. e = c.reshape(2,4,3)
  8. print(e)
  9. print(e.ndim) # 3

ndarray.itemsize

返回数组中每个元素的类型大小(以字节为单位)。

  1. import numpy as np
  2. x = np.array([1,2,3,4,5], dtype = np.int8)
  3. print (x.itemsize) # 1,数据类型为int8,代表1字节

ndarray.flags

返回 **ndarray**数组的内存信息,比如 ndarray数组的存储方式,以及是否是其他数组的副本等。

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

创建数组(除array()外的方法)

numpy.empty()

numpy.empty()创建未初始化的数组

  1. numpy.empty(shape, dtype = float, order = 'C')
  2. 其中:
  3. * shape:指定数组的形状,以元组的方式传参;
  4. * dtype:数组元素的数据类型,默认值是值 float
  5. * order:指数组元素在计算机内存中的储存顺序,默认顺序是“C”(行优先顺序)。
  1. import numpy as np
  2. arr = np.empty((3,2), dtype = int)
  3. print(arr) # 数组中存的是随机值

numpy.zeros()

该函数用来创建元素均为**0**的数组

  1. numpy.zeros(shape, dtype=float, order="C")

numpy.ones()

该函数用来创建元素均为**1**的数组

  1. numpy.ones(shape, dtype = None, order = 'C')

numpy.asarray()

asarray()array()类似,但它比array()更为简单。**asarray()**能够把一个Python序列(列表或元组)转换成**ndarray**对象

  1. numpy.asarraysequencedtype = None order = None
  2. 其中:
  3. * sequence:接收的是一个Python序列,可以是列表或元组;
  4. * dtype:可选参数,数组的数据类型;
  5. * order:数组内存布局方式,"C""F"

示例

  1. import numpy as np
  2. l=[1,2,3,4,5,6,7]
  3. a = np.asarray(l)
  4. print(type(a)) # <class 'numpy.ndarray'>
  5. print(a) # [1 2 3 4 5 6 7]

numpy.frombuffer()

表示使用指定的缓冲区创建数组

  1. numpy.frombuffer(buffer, dtype = float, count = -1, offset = 0)
  2. 其中:
  3. * buffer:将任意对象转换为流的形式读入缓冲区;
  4. * dtype:返回数组的数据类型,默认是 float32
  5. * count:要读取的数据数量,默认为-1,表示读取所有数据;
  6. * offset:读取数据的起始位置,默认为 0

示例

  1. import numpy as np
  2. #字节串类型
  3. l = b'hello world' # b 表示以字节流的方式存储
  4. print(type(l))
  5. a = np.frombuffer(l, dtype = "S1")
  6. print(a)
  7. print(type(a))

numpy.fromiter()

该方法可将迭代对象转换成**ndarray**数组,其返回值是一个一维数组

  1. numpy.fromiter(iterable, dtype, count = -1)
  2. 其中:
  3. * iterable:可迭代对象;
  4. * dtype:返回数组的数据类型;
  5. * count:读取的数据数量,默认为-1,表示读取所有数据。

示例

  1. import numpy as np
  2. # 使用 range 函数创建列表对象
  3. list=range(6)
  4. #生成可迭代对象i
  5. i=iter(list)
  6. #使用i迭代器,通过fromiter方法创建ndarray
  7. array=np.fromiter(i, dtype=float)
  8. print(array)

创建区间数组

区间数组

所谓区间数组,指的是数组元素的取值位于某个范围内,并且数组元素之间可能会呈现某种规律,如数列、递增或递减等。

创建区间数组

numpy.arange()

可以使用arange()创建给定数值范围的数组,用法与Python的range()方法类似。

  1. numpy.arange(start, stop, step, dtype)
  2. 其中:
  3. * start:起始值,默认从0开始;
  4. * stop:终止值,生成的数组元素值不包含终止值;
  5. * step:步长,默认是1
  6. * dtype:可选参数,指定ndarray数组的数据类型。

numpy.linspace()

表示在指定的数值区间内返回均匀间隔的一维等差数组默认均分50份

  1. np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
  2. 其中:
  3. * start:起始值;
  4. * stop:终止值;
  5. * num:表示数值区间内要生成多少个均匀的样本,默认值是50
  6. * endpoint:默认为True,表示数列包含终止值,反之不包含;
  7. * retstep:默认为False,表示生成的数组中会不显示公差项,反之显示;
  8. * dtype:代表数组元素值的数据类型,默认为float

示例

  1. # 常规默认参数示例:
  2. import numpy as np
  3. #生成10个样本
  4. a = np.linspace(1,10,10) # 默认包含终止值
  5. print(a) # [ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]
  6. # 带retstep参数示例:
  7. import numpy as np
  8. x = np.linspace(1,2,5, retstep = True)
  9. print(x) # (array([1. , 1.25, 1.5 , 1.75, 2. ]), 0.25)

numpy.logspace()

该函数同样返回一个ndarray数组,用于创建对数等分数组

  1. np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
  2. 其中:
  3. * start:序列的起始值为base**start,即basestart次方;
  4. * stop:序列的终止值为base**stop
  5. * num:数值范围内的样本数量,默认是50
  6. * endpoint:默认为True,表示数列包含终止值,反之不包含;
  7. * base:对数函数的log底数,默认是10
  8. * dtype:代表数组元素值的数据类型,默认为float

示例

  1. import numpy as np
  2. a = np.logspace(1,10,num = 10, base = 2)
  3. print(a) # [ 2. 4. 8. 16. 32. 64. 128. 256. 512. 1024.]