Numpy

1 数组Arrays

一个numpy数组是一个由不同数值组成的网格。网格中的数据都是同一种数据类型,可以通过非负整形数的元组来访问。维度的数量被称为数组的阶,数组的大小是由一个整型数构成的元组,可以描述数组不同维度上的大小。

我们可以从列表创建数组,然后利用方括号访问其中的元素:

 1 import numpy as np
 2 
 3 a = np.array([1, 2, 3])  # 创建一个秩为1的数组
 4 print type(a)            # Prints "<type 'numpy.ndarray'>"
 5 print a.shape            # Prints "(3,)"
 6 print a[0], a[1], a[2]   # Prints "1 2 3"
 7 a[0] = 5                 #更改数组的元素
 8 print a                  # Prints "[5, 2, 3]"
 9 
10 b = np.array([[1,2,3],[4,5,6]])   # 创建一个秩为2的数组
11 print b                           #[[1 2 3]
12                                     [4 5 6]]
13 print b.shape                     # Prints "(2, 3)"
14 print b[0, 0], b[0, 1], b[1, 0]   # Prints "1 2 4"

 Numpy还提供了很多创建数组的方法:

Numpy 中最常规的就是利用array函数来生成一个新的包含传递数据的NumPy 数组。array函数,参数如下:

1 import numpy as np
2 array1=np.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

 

 

 

除了array函数以外,还有以下一些生成函数,只是参数或多或少发生改变: 

生成函数 描述
zeros 返回特定大小,以 0 填充的新数组:numpy.zeros()
ones 返回特定大小,以 1 填充的新数组: numpy.ones()
eye 创建一个N * N的单位矩阵(对角线为1,其余为0): numpy.eye()
arange 这个函数返回ndarray对象,包含给定范围内的等间隔值:numpy.arange()
linspace 此函数类似于arange()函数。 在此函数中,指定了范围之间的均匀间隔数量,而不是步长。 此函数的用法如下:numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

例子如下:

 1 import numpy as np
 2 
 3 ndarray1 = np.ones((4,4))
 4 print("4x4元素全为1矩阵")
 5 print(ndarray1)
 6 
 7 ndarray2 = np.zeros((4,4))
 8 print("4x4元素全为0矩阵")
 9 print(ndarray2)
10 
11 ndarray3 = np.eye(4)
12 print("4x4单位矩阵")
13 print(ndarray3)
14 
15 ndarray4 = np.linspace(0,100,num=11)
16 print("0-100,生成11个数")
17 print(ndarray4)

输出:

 1 4x4元素全为1矩阵
 2 [[1. 1. 1. 1.]
 3  [1. 1. 1. 1.]
 4  [1. 1. 1. 1.]
 5  [1. 1. 1. 1.]]
 6 4x4元素全为0矩阵
 7 [[0. 0. 0. 0.]
 8  [0. 0. 0. 0.]
 9  [0. 0. 0. 0.]
10  [0. 0. 0. 0.]]
11 4x4单位矩阵
12 [[1. 0. 0. 0.]
13  [0. 1. 0. 0.]
14  [0. 0. 1. 0.]
15  [0. 0. 0. 1.]]
16 0-100,生成11个数
17 [  0.  10.  20.  30.  40.  50.  60.  70.  80.  90. 100.]

2 Numpy - 数组的一些基本属性

NumPy 数组的维数称为秩(rank),秩就是轴的数量,即数组的维度,一维数组的秩为 1,二维数组的秩为 2,以此类推。

 1 import numpy as np
 2 
 3 #生成一个5*5的单位矩阵
 4 ndarray= np.ones((5,5))
 5 #输出数组 ndarray的维度
 6 print(ndarray.shape)
 7 #输出数组 ndarray的总个数
 8 print(ndarray.size)
 9 
10 
11 输出结果为:
12 (5,513 25

 NumPy 的数组中比较重要 ndarray 对象属性有:

函数 描述
ndarray.ndim 秩,即轴的数量后维度的数量
ndarray.shape 数组的维度,对于矩阵,n行m列
ndarray.size 数组元素的总个数,相当于.shape中n * m的值
ndarray.dtype ndarray对象的元素类型
ndarray.itemsize ndarray 对象中每个元素的大小,以字节为单位

3 Numpy - 修改数组的形状

函数 描述
ndarray.reshape 在不改变数据的条件下修改形状,格式如下: ndarray.reshape(shape, order='C')或者numpy.reshape(arr, newshape, order='C')
ndarray.flat 将数组转换为1-D的迭代器ndarray.flat
ndarray.flatten 将多维数组转换为一维数组,返回一份数组拷贝,对拷贝所做的修改不会影响原始数组ndarray.flatten(order='C')
numpy.ravel 将多维数组将为一维数组,返回的是视图修改会影响原始数组,numpy.ravel(a, order='C')

例如:

1 import numpy as np
2 ndarray = np.ones((4,4))
3 print(ndarray)
4 print(ndarray.shape)
5 ndarray1 = ndarray.reshape(2,8)
6 print(ndarray1)
7 print(ndarray1.shape)
8 print(ndarray.flatten())

输出结果为:

1 [[1. 1. 1. 1.]
2  [1. 1. 1. 1.]
3  [1. 1. 1. 1.]
4  [1. 1. 1. 1.]]
5 (4, 4)
6 [[1. 1. 1. 1. 1. 1. 1. 1.]
7  [1. 1. 1. 1. 1. 1. 1. 1.]]
8 (2, 8)
9 [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]

4 NumPy - 数组元素的添加/删除

函数 描述
resize 返回指定形状的新数组,如果新数组大小大于原始大小,则包含原始数组中的元素的副本。:numpy.resize(arr, shape)
append 将值添加到数组末尾,输入数组的维度必须匹配否则将生成ValueError。numpy.append(arr, values, axis=None)
insert 沿指定轴将值插入到指定下标之前。numpy.insert(arr, obj, values, axis)
delete 删掉某个轴的子数组,并返回删除后的新数组。Numpy.delete(arr, obj, axis)
unique 查找数组内的唯一元素,函数用于去除数组中的重复元素:numpy.unique(arr, return_index, return_inverse, return_counts)

注意:axis:默认为 None。当axis无定义时,是横向加成,返回总是为一维数组!当axis有定义的时候,分别为0和1的时候。当axis为1时,数组是加在右边(行数要相同)

例如:

 1 import numpy as np
 2 ndarray2 = np.array([[1,2,3],[4,5,6],[7,8,9]])
 3 print(ndarray2)
 4 print("----------------")
 5 ndarray3 = np.resize(ndarray2,(4,3))
 6 print(ndarray3)
 7 print("----------------")
 8 ndarray4 = np.append(ndarray2,[0,0,0])
 9 ndarray5 = np.append(ndarray2,[[0,0,0]],axis=0)
10 print(ndarray4)
11 print("----------------")
12 print(ndarray5)
13 ndarray6 = np.delete(ndarray2,2,axis=0)
14 print("----------------")
15 print(ndarray6)

输出结果:

 1 [[1 2 3]
 2  [4 5 6]
 3  [7 8 9]]
 4 ----------------
 5 [[1 2 3]
 6  [4 5 6]
 7  [7 8 9]
 8  [1 2 3]]
 9 ----------------
10 [1 2 3 4 5 6 7 8 9 0 0 0]
11 ----------------
12 [[1 2 3]
13  [4 5 6]
14  [7 8 9]
15  [0 0 0]]
16 ----------------
17 [[1 2 3]
18  [4 5 6]]

5 Numpy - 通用函数

一元通用函数只接受一个数组,并返回一个结果数组。

函数 描述
abs(x)、fabs(x) 计算数组各元素的绝对值
sqrt(x) 计算数组各元素的平方根
square(x) 计算数组各元素的平方
exp(x) 计算各元素的自然指数值e^x
sign(x) 计算各元素的符号值:1(正)、0(0)、-1(负)
ceil(x) 计算大于等于给定值的最小整数值
floor(x) 计算大于等于给定值的最大整数值
rint(x) 四舍五入到最近的整数,保留dtype
modf(x) 将数组的小数和整数部分以两个独立的数组方式返回

例如:

 1 import numpy as np
 2 ndarray = np.array([[1,2,3],[4,5,6],[7,8,9]])
 3 print("生成一个3x3的矩阵:")
 4 print(ndarray)
 5 
 6 ndarray_sqrt = np.sqrt(ndarray)
 7 print("平方根:")
 8 print(ndarray_sqrt)
 9 
10 ndarray_exp = np.exp(ndarray)
11 print("指数:")
12 print(ndarray_exp)
13 
14 ndarray_log = np.log10(ndarray)
15 print("10为底的对数:")
16 print(ndarray_log)
17 
18 ndarray_tan = np.tan(ndarray)
19 print("正切:")
20 print(ndarray_tan)

输入:

 1 生成一个3x3的矩阵:
 2 [[1 2 3]
 3  [4 5 6]
 4  [7 8 9]]
 5 平方根:
 6 [[1.         1.41421356 1.73205081]
 7  [2.         2.23606798 2.44948974]
 8  [2.64575131 2.82842712 3.        ]]
 9 指数:
10 [[2.71828183e+00 7.38905610e+00 2.00855369e+01]
11  [5.45981500e+01 1.48413159e+02 4.03428793e+02]
12  [1.09663316e+03 2.98095799e+03 8.10308393e+03]]
13 10为底的对数:
14 [[0.         0.30103    0.47712125]
15  [0.60205999 0.69897    0.77815125]
16  [0.84509804 0.90308999 0.95424251]]
17 正切:
18 [[ 1.55740772 -2.18503986 -0.14254654]
19  [ 1.15782128 -3.38051501 -0.29100619]
20  [ 0.87144798 -6.79971146 -0.45231566]]

 

posted on 2021-03-10 14:46  满船清梦压星河1024  阅读(129)  评论(0)    收藏  举报