python中numpy函数ftt_numpy简介.ipynb

{

"cells": [

{

"cell_type": "code",

"execution_count": 1,

"metadata": {},

"outputs": [],

"source": [

"import numpy as np\n",

"import pandas as pd"

]

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

"直接用python列表创建数组"

]

},

{

"cell_type": "code",

"execution_count": 2,

"metadata": {},

"outputs": [],

"source": [

"a = np.array([1,2,3,4])"

]

},

{

"cell_type": "code",

"execution_count": 3,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([1, 2, 3, 4])"

]

},

"execution_count": 3,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a"

]

},

{

"cell_type": "code",

"execution_count": 4,

"metadata": {},

"outputs": [],

"source": [

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

]

},

{

"cell_type": "code",

"execution_count": 5,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[1, 2],\n",

" [3, 4],\n",

" [5, 6]])"

]

},

"execution_count": 5,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"b"

]

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

"查看array属性,包括数据的维度和类型"

]

},

{

"cell_type": "code",

"execution_count": 6,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"2"

]

},

"execution_count": 6,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"b.ndim"

]

},

{

"cell_type": "code",

"execution_count": 7,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"(3, 2)"

]

},

"execution_count": 7,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"b.shape"

]

},

{

"cell_type": "code",

"execution_count": 8,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"dtype('int32')"

]

},

"execution_count": 8,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"b.dtype #查看数组里元素的数据类型"

]

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

"使用numpy提供的函数创建数组"

]

},

{

"cell_type": "code",

"execution_count": 10,

"metadata": {},

"outputs": [],

"source": [

"c = np.arange(10) #创建连续数组"

]

},

{

"cell_type": "code",

"execution_count": 11,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])"

]

},

"execution_count": 11,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"c"

]

},

{

"cell_type": "code",

"execution_count": 12,

"metadata": {},

"outputs": [],

"source": [

"d = np.linspace(0,2,11) #【0,2】分成11等分后的数组"

]

},

{

"cell_type": "code",

"execution_count": 13,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([0. , 0.2, 0.4, 0.6, 0.8, 1. , 1.2, 1.4, 1.6, 1.8, 2. ])"

]

},

"execution_count": 13,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"d"

]

},

{

"cell_type": "code",

"execution_count": 15,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[1., 1., 1.],\n",

" [1., 1., 1.],\n",

" [1., 1., 1.]])"

]

},

"execution_count": 15,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"np.ones((3,3)) #注意参数两边的括号,参数是一个元组"

]

},

{

"cell_type": "code",

"execution_count": 16,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[0., 0., 0., 0., 0., 0.],\n",

" [0., 0., 0., 0., 0., 0.],\n",

" [0., 0., 0., 0., 0., 0.]])"

]

},

"execution_count": 16,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"np.zeros((3,6))"

]

},

{

"cell_type": "code",

"execution_count": 17,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[1., 0., 0., 0.],\n",

" [0., 1., 0., 0.],\n",

" [0., 0., 1., 0.],\n",

" [0., 0., 0., 1.]])"

]

},

"execution_count": 17,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"np.eye(4)"

]

},

{

"cell_type": "code",

"execution_count": 18,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[ 0.85324589, -0.98214667, -0.02497423, 1.39605612],\n",

" [-0.84914278, -0.72513599, 1.43461682, 0.44201015],\n",

" [ 0.82411746, 1.58126641, -0.9520279 , -4.37985418],\n",

" [-0.43746709, -0.19744133, -0.50435681, -0.19942042],\n",

" [-0.09425923, 0.28695003, -1.49051255, 0.16117562],\n",

" [ 2.40578888, -0.41170668, 1.20037168, -1.4647434 ]])"

]

},

"execution_count": 18,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"np.random.randn(6,4) #创建6*4的随机数组"

]

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

"numpy提供了灵活的索引机制来访问数组内的元素"

]

},

{

"cell_type": "code",

"execution_count": 19,

"metadata": {},

"outputs": [],

"source": [

"a = np.arange(10)"

]

},

{

"cell_type": "code",

"execution_count": 20,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])"

]

},

"execution_count": 20,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a"

]

},

{

"cell_type": "code",

"execution_count": 21,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"(0, 3, 9)"

]

},

"execution_count": 21,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a[0],a[3],a[-1]"

]

},

{

"cell_type": "code",

"execution_count": 22,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([0, 1, 2, 3])"

]

},

"execution_count": 22,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a[:4] #半开闭区间,不包含最后一个元素"

]

},

{

"cell_type": "code",

"execution_count": 23,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([3, 4, 5, 6])"

]

},

"execution_count": 23,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a[3:7]"

]

},

{

"cell_type": "code",

"execution_count": 24,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([6, 7, 8, 9])"

]

},

"execution_count": 24,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a[6:]"

]

},

{

"cell_type": "code",

"execution_count": 25,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([2, 4, 6])"

]

},

"execution_count": 25,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a[2:8:2] #3个参数表示起始、结束和步长,不包含结束为止"

]

},

{

"cell_type": "code",

"execution_count": 26,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([2, 4, 6, 8])"

]

},

"execution_count": 26,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a[2::2] #结束位置可以省略"

]

},

{

"cell_type": "code",

"execution_count": 27,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([0, 3, 6, 9])"

]

},

"execution_count": 27,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a[::3] #开始和结束都省略"

]

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

"二维数据的索引分成行和列两个维度,更加灵活"

]

},

{

"cell_type": "code",

"execution_count": 30,

"metadata": {},

"outputs": [],

"source": [

"a = np.arange(0,51,10).reshape(6,1) + np.arange(6) #创建一个6行6列的二维数据,使用广播机制"

]

},

{

"cell_type": "code",

"execution_count": 31,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[ 0, 1, 2, 3, 4, 5],\n",

" [10, 11, 12, 13, 14, 15],\n",

" [20, 21, 22, 23, 24, 25],\n",

" [30, 31, 32, 33, 34, 35],\n",

" [40, 41, 42, 43, 44, 45],\n",

" [50, 51, 52, 53, 54, 55]])"

]

},

"execution_count": 31,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a"

]

},

{

"cell_type": "code",

"execution_count": 32,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"(0, 25)"

]

},

"execution_count": 32,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a[0][0],a[2][-1]"

]

},

{

"cell_type": "code",

"execution_count": 33,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([2, 3, 4])"

]

},

"execution_count": 33,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a[0,2:5]"

]

},

{

"cell_type": "code",

"execution_count": 34,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[ 3, 4, 5],\n",

" [13, 14, 15],\n",

" [23, 24, 25]])"

]

},

"execution_count": 34,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a[:3,3:]"

]

},

{

"cell_type": "code",

"execution_count": 35,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([20, 21, 22, 23, 24, 25])"

]

},

"execution_count": 35,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a[2,:]"

]

},

{

"cell_type": "code",

"execution_count": 36,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([ 3, 13, 23, 33, 43, 53])"

]

},

"execution_count": 36,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a[:,3] #结果应该是列向量,但numpy自动转换行向量形式"

]

},

{

"cell_type": "code",

"execution_count": 37,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[ 0, 2, 4],\n",

" [10, 12, 14],\n",

" [20, 22, 24],\n",

" [30, 32, 34],\n",

" [40, 42, 44],\n",

" [50, 52, 54]])"

]

},

"execution_count": 37,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a[:,::2]"

]

},

{

"cell_type": "code",

"execution_count": 38,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[ 0, 3],\n",

" [20, 23],\n",

" [40, 43]])"

]

},

"execution_count": 38,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a[::2,::3]"

]

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

"另一个索引的方法是通过布尔数组"

]

},

{

"cell_type": "code",

"execution_count": 39,

"metadata": {},

"outputs": [],

"source": [

"a = np.random.randint(10,20,6)#在【10,20】之间产生6个随机数"

]

},

{

"cell_type": "code",

"execution_count": 40,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([11, 18, 17, 15, 12, 13])"

]

},

"execution_count": 40,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a"

]

},

{

"cell_type": "code",

"execution_count": 41,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([False, True, False, False, True, False])"

]

},

"execution_count": 41,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a % 2 == 0"

]

},

{

"cell_type": "code",

"execution_count": 42,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([18, 12])"

]

},

"execution_count": 42,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a[a % 2 ==0]"

]

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

"需要注意的是,numpy试图自动的把结果转换为行向量"

]

},

{

"cell_type": "code",

"execution_count": 43,

"metadata": {},

"outputs": [],

"source": [

"a = np.arange(0,51,10).reshape(6,1) + np.arange(6)"

]

},

{

"cell_type": "code",

"execution_count": 44,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[ 0, 1, 2, 3, 4, 5],\n",

" [10, 11, 12, 13, 14, 15],\n",

" [20, 21, 22, 23, 24, 25],\n",

" [30, 31, 32, 33, 34, 35],\n",

" [40, 41, 42, 43, 44, 45],\n",

" [50, 51, 52, 53, 54, 55]])"

]

},

"execution_count": 44,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a"

]

},

{

"cell_type": "code",

"execution_count": 45,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([ 0, 2, 4, 10, 12, 14, 20, 22, 24, 30, 32, 34, 40, 42, 44, 50, 52,\n",

" 54])"

]

},

"execution_count": 45,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a[a % 2 == 0]"

]

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

"需要注意的是,在大部分情况下,numpy数组是共享内存的,如果需要独立保存,需要显式地备份。可以使用np.may_share_memory()来判断两个数组是否共享内存"

]

},

{

"cell_type": "code",

"execution_count": 46,

"metadata": {},

"outputs": [],

"source": [

"a = np.arange(6)"

]

},

{

"cell_type": "code",

"execution_count": 47,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([0, 1, 2, 3, 4, 5])"

]

},

"execution_count": 47,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a"

]

},

{

"cell_type": "code",

"execution_count": 48,

"metadata": {},

"outputs": [],

"source": [

"b = a[2:5]"

]

},

{

"cell_type": "code",

"execution_count": 49,

"metadata": {},

"outputs": [],

"source": [

"b[1] = 100"

]

},

{

"cell_type": "code",

"execution_count": 50,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([ 2, 100, 4])"

]

},

"execution_count": 50,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"b"

]

},

{

"cell_type": "code",

"execution_count": 51,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([ 0, 1, 2, 100, 4, 5])"

]

},

"execution_count": 51,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a #数组a的值也改变了"

]

},

{

"cell_type": "code",

"execution_count": 52,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"True"

]

},

"execution_count": 52,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"np.may_share_memory(a,b)"

]

},

{

"cell_type": "code",

"execution_count": 53,

"metadata": {},

"outputs": [],

"source": [

"b = a[2:6].copy() #显式地备份"

]

},

{

"cell_type": "code",

"execution_count": 54,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([ 2, 100, 4, 5])"

]

},

"execution_count": 54,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"b"

]

},

{

"cell_type": "code",

"execution_count": 55,

"metadata": {},

"outputs": [],

"source": [

"b[1] = 3"

]

},

{

"cell_type": "code",

"execution_count": 56,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([2, 3, 4, 5])"

]

},

"execution_count": 56,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"b"

]

},

{

"cell_type": "code",

"execution_count": 57,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([ 0, 1, 2, 100, 4, 5])"

]

},

"execution_count": 57,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a #a数组的值没有改变"

]

},

{

"cell_type": "code",

"execution_count": 58,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"False"

]

},

"execution_count": 58,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"np.may_share_memory(a,b)"

]

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

"例子:使用埃拉托斯特尼筛法打印【1,100】之间的所有质数"

]

},

{

"cell_type": "code",

"execution_count": 63,

"metadata": {},

"outputs": [

{

"name": "stdout",

"output_type": "stream",

"text": [

"[ 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89\n",

" 97]\n"

]

}

],

"source": [

"import numpy as np\n",

"\n",

"a = np.arange(1,101)\n",

"n_max = int(np.sqrt(len(a))) #10\n",

"is_prime = np.ones(len(a),dtype = bool) #创建100个元素的数组,用来标记是否为质数\n",

"is_prime[0] = False\n",

"\n",

"for i in range(2,n_max):\n",

" if i in a[is_prime]:#跳过非质数\n",

" is_prime[(i**2 - 1)::i] = False #减1是为了修复从0开始索引的问题\n",

"print(a[is_prime])"

]

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

"numpy 运算"

]

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

" 数组和标量计算"

]

},

{

"cell_type": "code",

"execution_count": 64,

"metadata": {},

"outputs": [],

"source": [

"a = np.arange(6)"

]

},

{

"cell_type": "code",

"execution_count": 65,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([0, 1, 2, 3, 4, 5])"

]

},

"execution_count": 65,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a"

]

},

{

"cell_type": "code",

"execution_count": 66,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([ 5, 6, 7, 8, 9, 10])"

]

},

"execution_count": 66,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a + 5 #数组和标量加法"

]

},

{

"cell_type": "code",

"execution_count": 67,

"metadata": {},

"outputs": [],

"source": [

"b = np.random.randint(1,5,20).reshape(4,5)"

]

},

{

"cell_type": "code",

"execution_count": 68,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[3, 2, 2, 4, 1],\n",

" [3, 4, 4, 3, 1],\n",

" [4, 2, 1, 1, 4],\n",

" [4, 4, 1, 1, 1]])"

]

},

"execution_count": 68,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"b"

]

},

{

"cell_type": "code",

"execution_count": 69,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[ 9, 6, 6, 12, 3],\n",

" [ 9, 12, 12, 9, 3],\n",

" [12, 6, 3, 3, 12],\n",

" [12, 12, 3, 3, 3]])"

]

},

"execution_count": 69,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"b*3 #数组和标量乘法"

]

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

"使用numpy运行速度比较快"

]

},

{

"cell_type": "code",

"execution_count": 70,

"metadata": {},

"outputs": [],

"source": [

"c = np.arange(10000)"

]

},

{

"cell_type": "code",

"execution_count": 71,

"metadata": {},

"outputs": [

{

"name": "stdout",

"output_type": "stream",

"text": [

"6.54 µs ± 179 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n"

]

}

],

"source": [

"%timeit c + 1"

]

},

{

"cell_type": "code",

"execution_count": 72,

"metadata": {},

"outputs": [

{

"name": "stdout",

"output_type": "stream",

"text": [

"2.66 ms ± 280 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"

]

}

],

"source": [

"%timeit [i + 1 for i in c]"

]

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

"数组和数组的运算,如果数组的维度相同,那么在组内对应位置进行逐个元素的数学运算"

]

},

{

"cell_type": "code",

"execution_count": 2,

"metadata": {},

"outputs": [],

"source": [

"a = np.random.randint(1,5,20).reshape(5,4)"

]

},

{

"cell_type": "code",

"execution_count": 3,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[2, 3, 1, 1],\n",

" [3, 2, 4, 3],\n",

" [3, 3, 2, 1],\n",

" [4, 1, 1, 4],\n",

" [4, 1, 3, 1]])"

]

},

"execution_count": 3,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a"

]

},

{

"cell_type": "code",

"execution_count": 4,

"metadata": {},

"outputs": [],

"source": [

"b = np.ones((5,4),dtype = int)"

]

},

{

"cell_type": "code",

"execution_count": 5,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[1, 1, 1, 1],\n",

" [1, 1, 1, 1],\n",

" [1, 1, 1, 1],\n",

" [1, 1, 1, 1],\n",

" [1, 1, 1, 1]])"

]

},

"execution_count": 5,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"b"

]

},

{

"cell_type": "code",

"execution_count": 6,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[3, 4, 2, 2],\n",

" [4, 3, 5, 4],\n",

" [4, 4, 3, 2],\n",

" [5, 2, 2, 5],\n",

" [5, 2, 4, 2]])"

]

},

"execution_count": 6,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a + b #数组加法"

]

},

{

"cell_type": "code",

"execution_count": 7,

"metadata": {},

"outputs": [],

"source": [

"c = np.random.randint(1,5,12).reshape(3,4)"

]

},

{

"cell_type": "code",

"execution_count": 8,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[1, 4, 2, 3],\n",

" [2, 3, 4, 4],\n",

" [3, 2, 3, 1]])"

]

},

"execution_count": 8,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"c"

]

},

{

"cell_type": "code",

"execution_count": 9,

"metadata": {},

"outputs": [],

"source": [

"d = np.random.randint(1,5,12).reshape(3,4)"

]

},

{

"cell_type": "code",

"execution_count": 10,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[2, 3, 4, 1],\n",

" [2, 4, 1, 1],\n",

" [4, 1, 2, 4]])"

]

},

"execution_count": 10,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"d"

]

},

{

"cell_type": "code",

"execution_count": 11,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[ 2, 12, 8, 3],\n",

" [ 4, 12, 4, 4],\n",

" [12, 2, 6, 4]])"

]

},

"execution_count": 11,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"c * d #数组相乘,逐元素相乘,不是矩阵內积运算"

]

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

"需要注意的是,乘法是对应元素相乘,不是矩阵內积,矩阵內积是np.dot()"

]

},

{

"cell_type": "code",

"execution_count": 13,

"metadata": {},

"outputs": [],

"source": [

"a = np.random.randint(1,5,6).reshape(3,2)"

]

},

{

"cell_type": "code",

"execution_count": 14,

"metadata": {},

"outputs": [],

"source": [

"b = np.random.randint(1,5,6).reshape(2,3)"

]

},

{

"cell_type": "code",

"execution_count": 15,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[3, 3],\n",

" [1, 2],\n",

" [3, 3]])"

]

},

"execution_count": 15,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a"

]

},

{

"cell_type": "code",

"execution_count": 16,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[2, 2, 4],\n",

" [3, 3, 1]])"

]

},

"execution_count": 16,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"b"

]

},

{

"cell_type": "code",

"execution_count": 17,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[15, 15, 15],\n",

" [ 8, 8, 6],\n",

" [15, 15, 15]])"

]

},

"execution_count": 17,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"np.dot(a,b) #矩阵內积"

]

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

"如果数组的维度不同,numpy试图使用广播机制来匹配,如果不满足匹配条件,报错"

]

},

{

"cell_type": "code",

"execution_count": 18,

"metadata": {},

"outputs": [],

"source": [

"a = np.random.randint(1,5,20).reshape(5,4)"

]

},

{

"cell_type": "code",

"execution_count": 19,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[2, 1, 1, 4],\n",

" [2, 4, 2, 2],\n",

" [1, 1, 1, 3],\n",

" [1, 3, 1, 3],\n",

" [3, 4, 2, 4]])"

]

},

"execution_count": 19,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a"

]

},

{

"cell_type": "code",

"execution_count": 20,

"metadata": {},

"outputs": [],

"source": [

"b = np.arange(4)"

]

},

{

"cell_type": "code",

"execution_count": 21,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([0, 1, 2, 3])"

]

},

"execution_count": 21,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"b"

]

},

{

"cell_type": "code",

"execution_count": 22,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[2, 2, 3, 7],\n",

" [2, 5, 4, 5],\n",

" [1, 2, 3, 6],\n",

" [1, 4, 3, 6],\n",

" [3, 5, 4, 7]])"

]

},

"execution_count": 22,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a + b # 满足广播条件"

]

},

{

"cell_type": "code",

"execution_count": 23,

"metadata": {},

"outputs": [],

"source": [

"c = np.arange(5)"

]

},

{

"cell_type": "code",

"execution_count": 24,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([0, 1, 2, 3, 4])"

]

},

"execution_count": 24,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"c"

]

},

{

"cell_type": "code",

"execution_count": 25,

"metadata": {},

"outputs": [

{

"ename": "ValueError",

"evalue": "operands could not be broadcast together with shapes (5,4) (5,) ",

"output_type": "error",

"traceback": [

"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",

"\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)",

"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0ma\u001b[0m \u001b[1;33m+\u001b[0m \u001b[0mc\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",

"\u001b[1;31mValueError\u001b[0m: operands could not be broadcast together with shapes (5,4) (5,) "

]

}

],

"source": [

"a + c"

]

},

{

"cell_type": "code",

"execution_count": 27,

"metadata": {},

"outputs": [],

"source": [

"c = np.arange(5).reshape(5,1) #转换为5*1列向量"

]

},

{

"cell_type": "code",

"execution_count": 28,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[2, 1, 1, 4],\n",

" [3, 5, 3, 3],\n",

" [3, 3, 3, 5],\n",

" [4, 6, 4, 6],\n",

" [7, 8, 6, 8]])"

]

},

"execution_count": 28,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a + c"

]

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

"数组可以直接比较,返回一个同维度的布尔数组,针对布尔数组,可以使用all()和ang()函数返回布尔数组的标量值"

]

},

{

"cell_type": "code",

"execution_count": 29,

"metadata": {},

"outputs": [],

"source": [

"a = np.array([1,2,3,4])"

]

},

{

"cell_type": "code",

"execution_count": 30,

"metadata": {},

"outputs": [],

"source": [

"b = np.array([4,2,2,4])"

]

},

{

"cell_type": "code",

"execution_count": 31,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([False, True, False, True])"

]

},

"execution_count": 31,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a == b"

]

},

{

"cell_type": "code",

"execution_count": 32,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([False, False, True, False])"

]

},

"execution_count": 32,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a > b"

]

},

{

"cell_type": "code",

"execution_count": 33,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"False"

]

},

"execution_count": 33,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"(a==b).all()"

]

},

{

"cell_type": "code",

"execution_count": 34,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"True"

]

},

"execution_count": 34,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"(a==b).any()"

]

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

"numpy还提供一些数组运算的内置函数"

]

},

{

"cell_type": "code",

"execution_count": 35,

"metadata": {},

"outputs": [],

"source": [

"a = np.arange(6)"

]

},

{

"cell_type": "code",

"execution_count": 36,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([0, 1, 2, 3, 4, 5])"

]

},

"execution_count": 36,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a"

]

},

{

"cell_type": "code",

"execution_count": 37,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([ 1. , 0.54030231, -0.41614684, -0.9899925 , -0.65364362,\n",

" 0.28366219])"

]

},

"execution_count": 37,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"np.cos(a)"

]

},

{

"cell_type": "code",

"execution_count": 38,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([ 1. , 2.71828183, 7.3890561 , 20.08553692,\n",

" 54.59815003, 148.4131591 ])"

]

},

"execution_count": 38,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"np.exp(a)"

]

},

{

"cell_type": "code",

"execution_count": 39,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([0. , 1. , 1.41421356, 1.73205081, 2. ,\n",

" 2.23606798])"

]

},

"execution_count": 39,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"np.sqrt(a)"

]

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

"numpy还提供一些基本的统计功能,包括求和,求平均值,求方差等"

]

},

{

"cell_type": "code",

"execution_count": 40,

"metadata": {},

"outputs": [],

"source": [

"a = np.random.randint(1,5,6)"

]

},

{

"cell_type": "code",

"execution_count": 41,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([3, 3, 1, 2, 4, 1])"

]

},

"execution_count": 41,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a"

]

},

{

"cell_type": "code",

"execution_count": 42,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"14"

]

},

"execution_count": 42,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a.sum()"

]

},

{

"cell_type": "code",

"execution_count": 43,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"1"

]

},

"execution_count": 43,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a.min()"

]

},

{

"cell_type": "code",

"execution_count": 44,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"4"

]

},

"execution_count": 44,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a.max()"

]

},

{

"cell_type": "code",

"execution_count": 45,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"2.3333333333333335"

]

},

"execution_count": 45,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a.mean()"

]

},

{

"cell_type": "code",

"execution_count": 46,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"1.1055415967851334"

]

},

"execution_count": 46,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a.std()"

]

},

{

"cell_type": "code",

"execution_count": 47,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"2"

]

},

"execution_count": 47,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a.argmin() #最小值元素所在的索引"

]

},

{

"cell_type": "code",

"execution_count": 48,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"4"

]

},

"execution_count": 48,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a.argmax() #最大值元素所在的索引"

]

},

{

"cell_type": "code",

"execution_count": 49,

"metadata": {},

"outputs": [],

"source": [

"b = np.random.randint(1,5,24).reshape(6,4)"

]

},

{

"cell_type": "code",

"execution_count": 50,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[2, 2, 1, 2],\n",

" [3, 2, 1, 2],\n",

" [4, 3, 2, 3],\n",

" [3, 4, 1, 3],\n",

" [2, 3, 3, 2],\n",

" [4, 1, 2, 3]])"

]

},

"execution_count": 50,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"b"

]

},

{

"cell_type": "code",

"execution_count": 51,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([18, 15, 10, 15])"

]

},

"execution_count": 51,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"b.sum(axis=0)"

]

},

{

"cell_type": "code",

"execution_count": 52,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([ 7, 8, 12, 11, 10, 10])"

]

},

"execution_count": 52,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"b.sum(axis = 1)"

]

},

{

"cell_type": "code",

"execution_count": 53,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"58"

]

},

"execution_count": 53,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"b.sum(axis = 1).sum()"

]

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

"np.ravel可将多维数组摊平"

]

},

{

"cell_type": "code",

"execution_count": 54,

"metadata": {},

"outputs": [],

"source": [

"a = np.arange(12)"

]

},

{

"cell_type": "code",

"execution_count": 55,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])"

]

},

"execution_count": 55,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a"

]

},

{

"cell_type": "code",

"execution_count": 56,

"metadata": {},

"outputs": [],

"source": [

"b = a.reshape(4,3) #转换为4*3的二维数组"

]

},

{

"cell_type": "code",

"execution_count": 57,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[ 0, 1, 2],\n",

" [ 3, 4, 5],\n",

" [ 6, 7, 8],\n",

" [ 9, 10, 11]])"

]

},

"execution_count": 57,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"b"

]

},

{

"cell_type": "code",

"execution_count": 58,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])"

]

},

"execution_count": 58,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"b.ravel() #变为以为向量"

]

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

"使用np.newaxis给数组添加一个维度"

]

},

{

"cell_type": "code",

"execution_count": 59,

"metadata": {},

"outputs": [],

"source": [

"a = np.arange(4)"

]

},

{

"cell_type": "code",

"execution_count": 60,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([0, 1, 2, 3])"

]

},

"execution_count": 60,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a"

]

},

{

"cell_type": "code",

"execution_count": 61,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"(4,)"

]

},

"execution_count": 61,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a.shape"

]

},

{

"cell_type": "code",

"execution_count": 62,

"metadata": {},

"outputs": [],

"source": [

"b = a[:,np.newaxis] #在列上添加一个维度,变成4*1数组"

]

},

{

"cell_type": "code",

"execution_count": 63,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[0],\n",

" [1],\n",

" [2],\n",

" [3]])"

]

},

"execution_count": 63,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"b"

]

},

{

"cell_type": "code",

"execution_count": 65,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"(4, 1)"

]

},

"execution_count": 65,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"b.shape"

]

},

{

"cell_type": "code",

"execution_count": 66,

"metadata": {},

"outputs": [],

"source": [

"c = a[np.newaxis,:] #在行上添加一个维度,变成1*4数组"

]

},

{

"cell_type": "code",

"execution_count": 67,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[0, 1, 2, 3]])"

]

},

"execution_count": 67,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"c"

]

},

{

"cell_type": "code",

"execution_count": 68,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"(1, 4)"

]

},

"execution_count": 68,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"c.shape"

]

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

"数组排序"

]

},

{

"cell_type": "code",

"execution_count": 69,

"metadata": {},

"outputs": [],

"source": [

"a = np.random.randint(1,10,24).reshape(6,4)"

]

},

{

"cell_type": "code",

"execution_count": 70,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[2, 1, 3, 3],\n",

" [7, 5, 4, 2],\n",

" [4, 4, 5, 2],\n",

" [7, 1, 4, 3],\n",

" [9, 1, 3, 2],\n",

" [9, 3, 8, 2]])"

]

},

"execution_count": 70,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a"

]

},

{

"cell_type": "code",

"execution_count": 71,

"metadata": {},

"outputs": [],

"source": [

"b = np.sort(a,axis = 1) #按行独立排序,返回一个备份"

]

},

{

"cell_type": "code",

"execution_count": 72,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[1, 2, 3, 3],\n",

" [2, 4, 5, 7],\n",

" [2, 4, 4, 5],\n",

" [1, 3, 4, 7],\n",

" [1, 2, 3, 9],\n",

" [2, 3, 8, 9]])"

]

},

"execution_count": 72,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"b"

]

},

{

"cell_type": "code",

"execution_count": 73,

"metadata": {},

"outputs": [],

"source": [

"a.sort(axis=0) #按列排序"

]

},

{

"cell_type": "code",

"execution_count": 74,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[2, 1, 3, 2],\n",

" [4, 1, 3, 2],\n",

" [7, 1, 4, 2],\n",

" [7, 3, 4, 2],\n",

" [9, 4, 5, 3],\n",

" [9, 5, 8, 3]])"

]

},

"execution_count": 74,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a"

]

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

"多项式求解和多项式拟合"

]

},

{

"cell_type": "code",

"execution_count": 76,

"metadata": {},

"outputs": [],

"source": [

"p = np.poly1d([1,-4,3]) #二阶多项式的系数"

]

},

{

"cell_type": "code",

"execution_count": 77,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"3"

]

},

"execution_count": 77,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"p(0) #自变量为0时的多项式的值"

]

},

{

"cell_type": "code",

"execution_count": 78,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([3., 1.])"

]

},

"execution_count": 78,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"p.roots"

]

},

{

"cell_type": "code",

"execution_count": 79,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([0., 0.])"

]

},

"execution_count": 79,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"p(p.roots) #多项式根处的值"

]

},

{

"cell_type": "code",

"execution_count": 80,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"2"

]

},

"execution_count": 80,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"p.order #多项式的阶数"

]

},

{

"cell_type": "code",

"execution_count": 81,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([ 1, -4, 3])"

]

},

"execution_count": 81,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"p.coeffs #多项式的系数"

]

},

{

"cell_type": "code",

"execution_count": 82,

"metadata": {},

"outputs": [],

"source": [

"from __future__ import print_function"

]

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

"numpy提供的np.polyfit()函数可以用多项式对数据进行拟合"

]

},

{

"cell_type": "code",

"execution_count": 84,

"metadata": {},

"outputs": [],

"source": [

"import matplotlib.pyplot as plt"

]

},

{

"cell_type": "code",

"execution_count": 91,

"metadata": {},

"outputs": [

{

"name": "stdout",

"output_type": "stream",

"text": [

"[ 0.88237889 -2.087443 2.12592131 0.16654695]\n"

]

},

{

"data": {

"image/png": "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\n",

"text/plain": [

"

"

]

},

"metadata": {},

"output_type": "display_data"

}

],

"source": [

"n_dots = 20 #二十个点\n",

"n_orders = 3 #阶数\n",

"\n",

"x = np.linspace(0,1,n_dots) #创建20个点\n",

"y = np.sqrt(x) + 0.2 * np.random.rand(n_dots)\n",

"p = np.poly1d(np.polyfit(x,y,n_orders)) #用3阶多项式拟合\n",

"print(p.coeffs)\n",

"\n",

"#画出拟合出来的多项式所表达的曲线以及原始的店\n",

"t = np.linspace(0,1,200)\n",

"plt.plot(x,y,'ro',t,p(t),'-')\n",

"plt.show()"

]

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

"numpy保存读取文件"

]

},

{

"cell_type": "code",

"execution_count": 92,

"metadata": {},

"outputs": [],

"source": [

"a = np.arange(15).reshape(3,5)"

]

},

{

"cell_type": "code",

"execution_count": 93,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[ 0, 1, 2, 3, 4],\n",

" [ 5, 6, 7, 8, 9],\n",

" [10, 11, 12, 13, 14]])"

]

},

"execution_count": 93,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a"

]

},

{

"cell_type": "code",

"execution_count": 94,

"metadata": {},

"outputs": [],

"source": [

"np.savetxt('a.txt',a) "

]

},

{

"cell_type": "code",

"execution_count": 97,

"metadata": {},

"outputs": [],

"source": [

"b = np.loadtxt('a.txt')"

]

},

{

"cell_type": "code",

"execution_count": 98,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[ 0., 1., 2., 3., 4.],\n",

" [ 5., 6., 7., 8., 9.],\n",

" [10., 11., 12., 13., 14.]])"

]

},

"execution_count": 98,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"b"

]

},

{

"cell_type": "code",

"execution_count": 99,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[ 0, 1, 2, 3, 4],\n",

" [ 5, 6, 7, 8, 9],\n",

" [10, 11, 12, 13, 14]])"

]

},

"execution_count": 99,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"a"

]

},

{

"cell_type": "code",

"execution_count": 100,

"metadata": {},

"outputs": [],

"source": [

"np.save('a.npy',a) #保存为numpy特有的二进制格式"

]

},

{

"cell_type": "code",

"execution_count": 101,

"metadata": {},

"outputs": [],

"source": [

"c = np.load('a.npy')"

]

},

{

"cell_type": "code",

"execution_count": 102,

"metadata": {},

"outputs": [

{

"data": {

"text/plain": [

"array([[ 0, 1, 2, 3, 4],\n",

" [ 5, 6, 7, 8, 9],\n",

" [10, 11, 12, 13, 14]])"

]

},

"execution_count": 102,

"metadata": {},

"output_type": "execute_result"

}

],

"source": [

"c"

]

},

{

"cell_type": "code",

"execution_count": null,

"metadata": {},

"outputs": [],

"source": []

}

],

"metadata": {

"kernelspec": {

"display_name": "Python 3",

"language": "python",

"name": "python3"

},

"language_info": {

"codemirror_mode": {

"name": "ipython",

"version": 3

},

"file_extension": ".py",

"mimetype": "text/x-python",

"name": "python",

"nbconvert_exporter": "python",

"pygments_lexer": "ipython3",

"version": "3.6.5"

}

},

"nbformat": 4,

"nbformat_minor": 2

}

一键复制

编辑

原始数据

按行查看

历史

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值