目录

概述

Numpy  数组类型

Numpy初探

Numpy数组生成

列表或元组转换

arange方法创建

linspace方法创建

ones方法创建

zeros方法创建

eye方法创建

从已知数据创建

ndarray数组属性

概述

Numpy是支持python语言的数值计算扩充库,其拥有强大的多维数组处理能力与矩阵运算能力。除此之外,Numpy还内建了大量的函数,方便快速构建数学模型。

主要内容:

    数值类型及多维数组

    数组操作及随机抽样

    数学函数及代数运算

    数组索引及其他用法

Numpy  数组类型

Numpy支持的数值类型细分如下:

python没有tensorflow_python

在 NumPy 中,上面的这些数值类型都被归于 `dtype(data-type)` 对象的实例。
我们可以用 `numpy.dtype(object, align, copy)` 来指定数值类型。而在数组里面,可以用 `dtype=` 参数。

Numpy初探

1,创建一维数组,并指定数据类型

import numpy as np  # 导入 NumPy 模块

a = np.array([1.1, 2.2, 3.3], dtype=np.float64)  # 指定 1 维数组的数值类型为 float64
# 查看 a 及 dtype 类型
print(a,a.dtype)

运行结果:

python没有tensorflow_数组_02

2,使用.astype()方法在不同的数值类型之间相互转换

a.astype(int).dtype  # 将 a 的数值类型从 float64 转换为 int,并查看 dtype 类型
print(a.dtype)

运行结果:

python没有tensorflow_数组_03

Numpy数组生成

Numpy最核心、最重要的一个特性就是ndarray多维数组对象,拥有对高数组的处理能力

Numpy中,ndarray类具有六个参数,分别为:

1、shape:数组的形状

2、dtype:数据类型

3、buffer:对象暴露缓冲区接口

4、offset:数组数据的偏移量

5、strides:数据步长

6、order:{'C','F'},以行或列为主排序顺序

在Numpy中,主要通过以下几种途径创建数组,它们分别是:

1、从python数组结构列表,元组等转换

2、使用np.arange\np.ones\np.zeros等Numpy原生方法

3、从存储空间读取数据

4、通过使用字符串或者缓冲区从原始字节创建数组

列表或元组转换

在Numpy中,使用numpy.array将列表或者元组转换为ndarray数组。方法为:

numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)

其中的参数:

  • object:列表、元组等。    
  • dtype:数据类型。如果未给出,则类型为被保存对象所需的最小类型。
  • copy:布尔类型,默认 True,表示复制对象。
  • order:顺序。
  • subok:布尔类型,表示子类是否被传递。
  • ndmin:生成的数组应具有的最小维数。

通过列表创建一个ndarray数组

a = np.array([[1, 2, 3], [4, 5, 6]])
print(a)

运行结果:

[[1 2 3]
 [4 5 6]]

通过元组创建一个ndarray数组

b = np.array([(1, 2), (3, 4), (5, 6)])
print(b)

运行结果:

[[1 2]
 [3 4]
 [5 6]]

arange方法创建

arange()的功能是在给定区间内创建一系列均匀间隔的值,方法如下:

numpy.arange(start, stop, step, dtype=None)

参数设置为值所在的区间[开始,停止),这是一个半开半闭区间,然后设置步长用于设置值之间的间隔。最后选择dtype可以返回ndarray的值类型。

实例

# 在区间 [3, 7) 中以 0.5 为步长新建数组
a = np.arange(3, 7, 0.5, dtype='float32')
print(a,a.dtype)

运行结果:

[3.  3.5 4.  4.5 5.  5.5 6.  6.5] float32

linspace方法创建

linspace用于在指定的区间内返回间隔均匀的值,方法如下:

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

参数为:

  • start:序列的起始值。
  • stop:序列的结束值。
  • num:生成的样本数。默认值为50。
  • endpoint:布尔值,如果为真,则最后一个样本包含在序列内。
  • retstep:布尔值,如果为真,返回间距。
  • dtype:数组的类型。

实例

a = np.linspace(0, 10, 10, endpoint=True)
print(a)

运行结果:

[ 0.          1.11111111  2.22222222  3.33333333  4.44444444  5.55555556
  6.66666667  7.77777778  8.88888889 10.        ]

若将endpoint参数改成False

a = np.linspace(0, 10, 10, endpoint=False)
print(a)

运行结果:

[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]

ones方法创建

numpy.ones用于快速创建数值全部为1的多维数组,方法如下:

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

参数为:

  • shape:用于指定数组形状,例如(1, 2)或 3。
  • dtype:数据类型。
  • order{'C','F'},按行或列方式储存数组。

实例

a = np.ones((2, 3))
print(a)

运行结果:

[[1. 1. 1.]
 [1. 1. 1.]]

zeros方法创建

zeros方法和ones方法非常相似,不同的地方在于,这里全部填充为0,zeros方法和ones方法是一致的

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

参数:

  • shape:用于指定数组形状,例如(1, 2)3
  • dtype:数据类型。
  • order{'C','F'},按行或列方式储存数组。

实例

a = np.zeros((3, 2))
print(a)

运行结果:

[[0. 0.]
 [0. 0.]
 [0. 0.]]

eye方法创建

numpy.eye用于创建一个二维数组,其特点是K对角线上的值为1,其余值全部为0。方法如下:

numpy.eye(N, M=None, k=0, dtype=<type 'float'>)

参数:

  • N:输出数组的行数。
  • M:输出数组的列数。
  • k:对角线索引:0(默认)是指主对角线,正值是指上对角线,负值是指下对角线。

实例

a = np.eye(5, 4, 3)
print(a)

运行结果

[[0. 0. 0. 1.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]

从已知数据创建

Numpy提供了下面5个方法

  • frombuffer(buffer):将缓冲区转换为 1 维数组。
  • fromfile(file,dtype,count,sep):从文本或二进制文件中构建多维数组。
  • fromfunction(function,shape):通过函数返回值来创建多维数组。
  • fromiter(iterable,dtype,count):从可迭代对象创建 1 维数组。
  • fromstring(string,dtype,count,sep):从字符串中创建 1 维数组。

实例

a = np.fromfunction(lambda a, b: a + b, (5, 4))
print(a)

运行结果:

[[0. 1. 2. 3.]
 [1. 2. 3. 4.]
 [2. 3. 4. 5.]
 [3. 4. 5. 6.]
 [4. 5. 6. 7.]]

ndarray数组属性

创建一个二维数组并赋值

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(a)  # 查看 a 的值

运行结果

[[1 2 3]
 [4 5 6]
 [7 8 9]]

ndarray.T用于数组的转置,与.transpase()相同

b = a.T
print(b)

运行结果

[[1 4 7]
 [2 5 8]
 [3 6 9]]

ndarray.dtype用来输出数组包含元素的数据类型

print(b.dtype)

运行结果

int64

ndarray.imag用于输出数组包含元素的虚部

print(b.imag)

运行结果

[[0 0 0]
 [0 0 0]
 [0 0 0]]

ndarray.real用来输出数组包含元素的实部

print(b.real)

运行结果

[[1 4 7]
 [2 5 8]
 [3 6 9]]

ndarray.size用来输出数组中的总包含元素数

print(b.size)

运行结果

9

ndarray.itemsize输出一个数组元素的字节数

print(b.itemsize)

运行结果:

8

ndarray.nbytes用来输出数组的元素总字节数

print(b.nbytes)

运行结果

72

ndarray.ndim用来输出数组尺寸

print(b.ndim)

运行结果

2

ndarray.shape用来输出数组维数组

print(b.shape)

运行结果

(3, 3)

ndarray.strides用来遍历数组时,输出每个维度中步进的字节数组

print(b.strides)

运行结果

(8, 24)

数组维度和形状

Numpy数组又被称为ndarray多维数组,那么n就可以从1维一次递增,如下图的1至3维的Nnmpy数组示例。

python没有tensorflow_python没有tensorflow_04

1维数组可以被看作数学中的向量,2维数组可以看作是矩阵,而3维数组则是一个数据立方

实例

one = np.array([7, 2, 9, 10])
two = np.array([[5.2, 3.0, 4.5],
                [9.1, 0.1, 0.3]])
three = np.array([[[1, 1], [1, 1], [1, 1]],
                  [[1, 1], [1, 1], [1, 1]],
                  [[1, 1], [1, 1], [1, 1]],
                  [[1, 1], [1, 1], [1, 1]]])
print(one.shape,two.shape,three.shape)

运行结果

(4,) (2, 3) (4, 3, 2)

数组基本操作

重设形状

reshape可以在不改变数组数据的同时,改变数组的形状。其中numpy.shape()等效于ndarray.reshape()

numpy.reshape(a, newshape)

其中参数a表示原数组,newshape用于指定新的形状(整数或者元组)

a = np.arange(10).reshape((5, 2))
print(a)

运行结果

[[0 1]
 [2 3]
 [4 5]
 [6 7]
 [8 9]]

数组展开

ravel的目的是将任意形状的数组扁平化,变为1维数组,ravel方法如下:

numpy.ravel(a, order='C')

其中,a 表示需要处理的数组。order 表示变换时的读取顺序,默认是按照行依次读取,当 order='F' 时,可以按列依次读取排序。

a = np.arange(10).reshape((2, 5))
print(a)
b = np.ravel(a)
print(b)
c = np.ravel(a, order='F')
print(c)

运行结果

[[0 1 2 3 4]
 [5 6 7 8 9]]
[0 1 2 3 4 5 6 7 8 9]
[0 5 1 6 2 7 3 8 4 9]

轴移动

未完待续~