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,5) 13 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]]
人的一生像是一把算盘,似乎无时不在计算着什么,却是被别人拨弄的一生
浙公网安备 33010602011771号