numpy

NumPy的数组类被称作ndarray

ndarry的创建:

创建一维数组:类型为ndarray


array是一个类似ones的函数

import numpy as np

a=np.array([1,2,3])
print(a)
print(type(a))

 

结果:

[1 2 3]
<class 'numpy.ndarray'>

创建二维数组:

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

 

结果:

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

创建三维数组:

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

 

结果:

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

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

创建0数组:(3,2)代表二维数组,第一维有三个数组,第二维有二个

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

 

结果:

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

创建全1数组:

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

结果:

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

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

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

 

empty:调用和上一个一样大小的矩阵,上一个3*3是全1下面的也是全1,上面的变全0下面的也是全0

arr_one=np.ones((3,3))
print('arr_one:')
print(arr_one)
arr=np.empty((3,3),dtype='i1')
print('arr:')
print(arr)
arr_zeros=np.zeros((3,3))
print('arr_zeros:')
print(arr_zeros)
arr3=np.empty((3,3),dtype='i1')
print(arr3)
print(arr3)

 

arr_one:
[[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]]
arr:
[[1 1 1]
[1 1 1]
[1 1 1]]
arr_zeros:
[[ 0. 0. 0.]
[ 0. 0. 0.]
[ 0. 0. 0.]]
[[0 0 0]
[0 0 0]
[0 0 0]]
[[0 0 0]
[0 0 0]
[0 0 0]]

 

arange函数: 类似python的range函数,通过指定开始值、终值和步长来创建一个一维数组,注意:最终创建的数组不包含终值

a=np.arange(20)
b=np.arange(1,20)
c=np.arange(10,20,2)
d=np.arange(20,15,-1)
print(a)
print(b)
print(c)
print(d)

 

结果:

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

linspace函数:通过指定开始值、终值和元素个数来创建一个一维数组,数组的数据元素符合等差数列,

endpoint为True表示包含最后的值,否则不包含,如果包含的话步长为终值-初始值再除以个数-1,不包含就不用减1

retstep为True显示步长

arr=np.linspace(0,10,5,endpoint=False,retstep=True)
print(arr)
arr2=np.linspace(0,10,6)
print(arr2)
arr3=np.linspace(0,10,5,endpoint=True)
print(arr3)

(array([ 0., 2., 4., 6., 8.]), 2.0)
[ 0. 2. 4. 6. 8. 10.]
[ 0. 2.5 5. 7.5 10. ]

 

logspace函数:和linspace函数类似,不过创建的是等比数列数组,0和2表示10的0次方和10的2次方 可以指定底数为2

步长是终值除以初值再开个数的次方

可以用来控制学习率,一开始很大后来很小

a=np.logspace(0,2,5)
b=np.logspace(0,2,5,base=2)
print(a)
print(b)

 

使用随机数填充数组:即使用numpy.random中的random()函数来创建0-1之间的随机元素,数组包含的元素数量由参数决定

random.rand()和它有类似的效果 这个和上面的用的少主要用来加噪音

random.randn()生成正太分布的值,用来生成初始权重的值 这个和下面的用的比较多

random.randint():生成指定范围整数形式

a=np.random.random((3,2,3))
print(a)
b=np.random.randint(0,9,size=([3,2,3]))
print(b)

 [[[ 0.16457832 0.62392568 0.12147039]

[ 0.93102204 0.94546256 0.89936897]]

[[ 0.76421283 0.76901106 0.85803104]
[ 0.78047088 0.12490645 0.20241544]]

[[ 0.81234778 0.1706378 0.46777206]
[ 0.46362101 0.65915849 0.81233809]]]

 

[[[1 7 2]
[0 3 2]]

[[4 8 3]
[2 2 1]]

[[4 5 8]
[3 5 6]]]

ndarray对象属性:

shape: 数组的维度, 例如一个2排3列的矩阵,它的shape属性将是(2,3),这个元组的长度显然是秩,即维度或者ndim属性

size :数组元素的总个数,等于shape属性中元组元素的乘积

dtype: 一个用来描述数组中元素类型的对象

itemsize: 数组中每个元素的字节大小

ndim:维数

a=np.random.random((3,2,3))
print(a)
print(a.shape)
print(a.size)
print(a.dtype)
print(a.ndim)
 

结果:

[[[ 0.69687113 0.64635635 0.33509638]
[ 0.89577043 0.52402303 0.14022035]]

[[ 0.75843167 0.97081013 0.27377149]
[ 0.55884246 0.51996251 0.13923623]]

[[ 0.54949654 0.09005034 0.42206612]
[ 0.94917494 0.38606105 0.79835506]]]
(3, 2, 3)
18
float64
3

 

Numpy基本数据类型:int_默认整型,int8-i1(1个字节2的0次方,一个字节是8位,2的8次方是-127-128)  int16-i2...

uint8-u1(u就是无符号,简单来说就是正整数) 

float16-f2  float32-f4(1个符号位+8位指数+23位小数)

既有数字又有数字定义object

String_-S 字节  一个字符一个字节

Unicode_-U 字符串 每个字符占用字节数由平台决定

修改数据类型:

修改其实是新的数组原来的数组没有变

a=np.array([1,2,3,4])
print(a.dtype)
b=a.astype(float)
print(a.dtype)
print(b.dtype)

int32
int32
float64

 

ndarray修改形状

直接使用reshape函数创建一个改变尺寸的新数组,原数组的shape保持不变,但是新数组和原数组共享一个内存空间,也就是修改任何一个数组中的值都会对另外一个产生影响,另外要求新数组的元素个数和原数组一致

a=np.arange(0,20,2)
b=a.reshape(5,2)
print(a)
print(b)
b[0][1]=100
print(a)
print(b)

 [ 0 2 4 6 8 10 12 14 16 18]

[[ 0 2]
[ 4 6]
[ 8 10]
[12 14]
[16 18]]
[ 0 100 4 6 8 10 12 14 16 18]
[[ 0 100]
[ 4 6]
[ 8 10]
[ 12 14]
[ 16 18]]

当指定某一个轴为-1的时候,表示将根据数组元素的数量自动计算该轴的长度值

reshape修改复制之后的形状,a.shape修改原数组的形状

a=np.arange(0,20,2)
b=a.reshape(5,-1)
print(a)
print('-'*20)
print(b)
print('-'*20)
a.shape=(2,-1)
print(a)

 [ 0 2 4 6 8 10 12 14 16 18]

--------------------
[[ 0 2]
[ 4 6]
[ 8 10]
[12 14]
[16 18]]
--------------------
[[ 0 2 4 6 8]
[10 12 14 16 18]]

 

Numpy基本操作

ndarray-数组与标量、数组之间的运算:数组不用循环即可对每个元素执行批量的算术运算操作,这个过程叫做矢量化,即用数组表达式代替循环的做法

1.矩阵与数之间的运算

a=np.arange(1,6)
print(a)
print(a+2)
print(a-2)
print(a*2)
print(a/2)
print(1/a)
print(a**2)
print(2**a)

[1 2 3 4 5]

[3 4 5 6 7]
[-1 0 1 2 3]
[ 2 4 6 8 10]
[ 0.5 1. 1.5 2. 2.5]
[ 1. 0.5 0.33333333 0.25 0.2 ]
[ 1 4 9 16 25]
[ 2 4 8 16 32]

本质上是前面的np.arange(20),只要里面的数字相同即可,结果和维度多的那个一样
a=np.arange(20).reshape(1,4,5)
print('a=')
print(a)
print('-'*20)
b=np.arange(20).reshape(4,5)
print('b=')
print(b)
print('-'*20)
print('a+b=')
print(a+b)

a=
[[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]]
--------------------
b=
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
--------------------
a+b=
[[[ 0 2 4 6 8]
[10 12 14 16 18]
[20 22 24 26 28]
[30 32 34 36 38]]]

2.矩阵与矩阵之间的运算

arr1=np.array([[1,2,3],[4,5,6]])
arr2=np.array([[4.6,3.2,2.1],[5.2,4.3,3.4]])
print('arr1+arr2=')
print(arr1+arr2)
print('arr1-arr2=')
print(arr1-arr2)
print('arr1*arr2=')
print(arr1*arr2)
print('arr1/arr2=')
print(arr1/arr2)

 arr1+arr2=

[[ 5.6 5.2 5.1]
[ 9.2 9.3 9.4]]
arr1-arr2=
[[-3.6 -1.2 0.9]
[-1.2 0.7 2.6]]
arr1*arr2=
[[ 4.6 6.4 6.3]
[ 20.8 21.5 20.4]]
arr1/arr2=
[[ 0.2173913 0.625 1.42857143]
[ 0.76923077 1.1627907 1.76470588]]

不同形状的数组进行运算,通过广播能力,4和4要对应上才可以乘
a=np.array([1,2,3,4])#(4,)
b=np.array([[10,20,30,40],[1,2,3,4]])#(2,4)
print(a*b)

 

[[ 10 40 90 160]
[ 1 4 9 16]]

 

3.数组的矩阵积:dot和inner在二维上是一样的,三维上有区别

arr1=np.array([[1,2],[4,5]])
arr2=np.array([[4.6,3.2],[5.2,4.3]])
print(arr1.dot(arr2))
arr3=np.dot(arr1,arr2)
print(arr3)

 [[ 15. 11.8]

[ 44.4 34.3]]
[[ 15. 11.8]
[ 44.4 34.3]]

 

矩阵索引

arr=np.array([
    [
        [2,3,4,5],[1,3,4,9]
    ],
    [
        [0,3,4,8],[2,4,9,4]
    ],
    [
        [1,4,5,8],[2,5,6,8]
    ],
    [
        [2,3,6,8],[3,4,8,9]
    ]
])
print(arr[3])
print('-'*20)
print(arr[3,1])
print('-'*20)
print(arr[3][1][2])
print('-'*20)
print(arr[3,1,2])

 

结果:

[[2 3 6 8]
[3 4 8 9]]
--------------------
[3 4 8 9]
--------------------
8
--------------------
8

在各维度上单独切片,如果某维度都保留,则直接使用:,不指定起始值和终止值

注意:Numpy中通过切片得到的新数组,只是原来数组的一个试图,因此对新数组进行操作也会影响原数组,不能使用arr[:][:][1:3]如果这样,第一个[]就默认把数组取完了

arr=np.array([
    [
        [2,3,4,5],[1,3,4,9]
    ],
    [
        [0,3,4,8],[2,4,9,4]
    ],
    [
        [1,4,5,8],[2,5,6,8]
    ],
    [
        [2,3,6,8],[3,4,8,9]
    ]
])
print(arr[3][1][1:3])
print('-'*20)
print(arr[3,1,1:3])

 

结果:

[4 8]
--------------------
[4 8]

利用布尔类型的数组进行数据索引,最终返回的结果是对应索引数组中数据为True位置的值

arr=np.random.random((4,4))
arr2=arr<0.5
print(arr2)
arr3=arr[arr2]
print(arr3,arr3.shape)

 [[False False False False]

[ True False True False]
[False True False False]
[ True False True True]]
[ 0.2886168 0.49285157 0.09925616 0.00371036 0.0282944 0.20428113] (6,)

Numpy中不能使用and、or和not,相应的替代为| & ~

names=np.array(['Gerry','Tom','John'])
scores=np.array([
    [98,87,86,95],
    [58,56,54,51],
    [78,85,85,77]
])
classes=np.array(['语文','数学','英语','科学'])
print('Gerry score is:',scores[names=='Gerry'].reshape((-1)))
print('Gerry math score is:',scores[names=='Gerry'].reshape((-1))[classes=='数学'])
print('Gerry and Tom scores are: ',scores[(names=='Gerry')|(names=='Tom')])
print('not Gerry and Tom scores are: ',scores[(names!='Gerry')&(names!='Tom')])

 Gerry score is: [98 87 86 95]

Gerry math score is: [87]
Gerry and Tom scores are: [[98 87 86 95]
[58 56 54 51]]
not Gerry and Tom scores are: [[78 85 85 77]]

 

花式索引:花式索引(Fancy indexing)指的是利用整数数组进行索引的方式

arr=np.arange(32).reshape(8,4)
print(arr)
print('获取第0,3,5行数据')
print(arr[[0,3,5]])
print('获取第(0,0)、(3,3)、(5,2)这三个位置的数据')
print(arr[[0,3,5],[0,3,2]])
print('获取第0、3、5行的第0、2、3列的数据')
print(arr[np.ix_([0,3,5],[0,2,3])])

 [[ 0 1 2 3]

[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]
[16 17 18 19]
[20 21 22 23]
[24 25 26 27]
[28 29 30 31]]
获取第0,3,5行数据
[[ 0 1 2 3]
[12 13 14 15]
[20 21 22 23]]
获取第(0,0)、(3,3)、(5,2)这三个位置的数据
[ 0 15 22]
获取第0、3、5行的第0、2、3列的数据
[[ 0 2 3]
[12 14 15]
[20 22 23]]

 

矩阵的转置

arr=np.arange(32).reshape(8,4)
print(arr,arr.shape)
arr1=arr.transpose()
print('转置后的数据')
print(arr1,arr1.shape)
print('第二种方法:')
print(arr.T,arr.T.shape)

 [[ 0 1 2 3]

[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]
[16 17 18 19]
[20 21 22 23]
[24 25 26 27]
[28 29 30 31]] (8, 4)
转置后的数据
[[ 0 4 8 12 16 20 24 28]
[ 1 5 9 13 17 21 25 29]
[ 2 6 10 14 18 22 26 30]
[ 3 7 11 15 19 23 27 31]] (4, 8)
第二种方法:
[[ 0 4 8 12 16 20 24 28]
[ 1 5 9 13 17 21 25 29]
[ 2 6 10 14 18 22 26 30]
[ 3 7 11 15 19 23 27 31]] (4, 8)

多维度转置,(3,4,2)对应的位置分别是0,1,2,transpose(1,0,2)对应的就是4,3,2可以自己计算,比如一个位置是(2,3,1) 转置过后的位置就是(3,2,1)

a=np.arange(24).reshape(3,4,2)
print(a)
print(a.shape)
a=a.transpose(1,0,2)
print(a)
print(a.shape)

 

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

[[ 8 9]
[10 11]
[12 13]
[14 15]]

[[16 17]
[18 19]
[20 21]
[22 23]]]
(3, 4, 2)
[[[ 0 1]
[ 8 9]
[16 17]]

[[ 2 3]
[10 11]
[18 19]]

[[ 4 5]
[12 13]
[20 21]]

[[ 6 7]
[14 15]
[22 23]]]
(4, 3, 2)

 Ndarray常用函数

abs/fabs:去绝对值,fabs快一点

arr=np.array([-5.3,-6.2,-5,0,4.2,5,3,2,1])
print(np.abs(arr))
print(np.fabs(arr))

 [ 5.3 6.2 5. 0. 4.2 5. 3. 2. 1. ]

[ 5.3 6.2 5. 0. 4.2 5. 3. 2. 1. ]

sqrt:平方更,要求每个元素大于等于0

arr=np.array([-5.3,-6.2,-5,0,4.2,5,3,2,1])
print(np.sqrt(np.fabs(arr)))

 [ 2.30217289 2.48997992 2.23606798 0. 2.04939015 2.23606798

1.73205081 1.41421356 1. ]

square:计算每个元素的评分,相当于arr**2

arr=np.array([-5.3,-6.2,-5,0,4.2,5,3,2,1])
print(np.square(arr))

  [ 28.09  38.44  25.     0.    17.64  25.     9.     4.     1.  ]

 exp:计算每个元素的指数e的x次方

arr=np.array([-5.3,-6.2,-5,0,4.2,5,3,2,1])
print(np.exp(arr))

 [ 4.99159391e-03 2.02943064e-03 6.73794700e-03 1.00000000e+00

6.66863310e+01 1.48413159e+02 2.00855369e+01 7.38905610e+00
2.71828183e+00]

log、log10、log2、log1p:分别计算自然对数、底数为10的log、底数为2的log以及log(1+x);要求arr中的每个元素必须为正数

numpy做不了以2和10其他以外的底数的计算

arr=np.array([-5.3,-6.2,-5,0,4.2,5,3,2,1])
arr=np.fabs(arr+1)
arr=np.fabs(arr)
print(np.log(arr))
print(np.log10(arr))
print(np.log2(arr))
print(np.log1p(arr))

 [ 1.45861502 1.64865863 1.38629436 0. 1.64865863 1.79175947

1.38629436 1.09861229 0.69314718]
[ 0.63346846 0.71600334 0.60205999 0. 0.71600334 0.77815125
0.60205999 0.47712125 0.30103 ]
[ 2.10433666 2.37851162 2. 0. 2.37851162 2.5849625 2.
1.5849625 1. ]
[ 1.66770682 1.82454929 1.60943791 0.69314718 1.82454929 1.94591015
1.60943791 1.38629436 1.09861229]

sign:计算每个元素的符号1表示正 0:0 -1表示负号

arr=np.array([-5.3,-6.2,-5,0,4.2,5,3,2,1])
print(np.sign(arr))

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

ceil:计算大于等于该值得最小整数

arr=np.array([-5.3,-6.2,-5,0,4.2,5,3,2,1])
print(np.ceil(arr))

 [-5. -6. -5.  0.  5.  5.  3.  2.  1.]

floor:与ceil对应,去小于或等于该值得最大整数

arr=np.array([-5.3,-6.2,-5,0,4.2,5,3,2,1])
print(np.floor(arr))

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

rint:四舍五入最接近的整数

arr=np.array([-5.3,-6.2,-5,0,4.2,5,3,2,1])
print(np.rint(arr))

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

modf:将数组中的整数和小数分两个数组返回

arr=np.array([-5.3,-6.2,-5,0,4.2,5,3,2,1])
print(np.modf(arr))

 (array([-0.3, -0.2, -0. ,  0. ,  0.2,  0. ,  0. ,  0. ,  0. ]), array([-5., -6., -5.,  0.,  4.,  5.,  3.,  2.,  1.]))

isnan:不是数字的bool值isnan是is not a number缩写

arr=np.array([-5.3,-6.2,-5,0,4.2,5,3,2,1])
print(np.isnan(arr))

 [False False False False False False False False False]

isfinte:判断是否是无穷的

isinf:判断是否是有限的

arr=np.array([np.pi,3])
print(np.isfinite(arr))
print(np.isinf(arr))

 [ True True]

[False False]

sin、cos、tan、sinh、cosh、tanharccos、arccosh、arcsin、arcsinh、arctan、arctanh:双曲正弦sinhx=[e^x-e^(-x)]/2,双曲余弦coshx=[e^x+e^(-x)]/2,双曲正切tanh=(e^(-x)-e^x)/(e^(-x)+e^x)

arr=np.array([np.pi/2,np.pi/3,np.pi/4])
print(np.sin(arr))
print(np.cos(arr))
print(np.tan(arr))
print(np.sinh(arr))
print(np.cosh(arr))
print(np.tanh(arr))

 [ 1. 0.8660254 0.70710678]

[ 6.12323400e-17 5.00000000e-01 7.07106781e-01]
[ 1.63312394e+16 1.73205081e+00 1.00000000e+00]
[ 2.3012989 1.24936705 0.86867096]
[ 2.50917848 1.60028686 1.32460909]
[ 0.91715234 0.78071444 0.6557942 ]

mod:元素级取余
greater:arr2>arr1
greater_equal:arr2>=arr1
less:arr2<arr1
less_equal:arr2<=arr1
equal:arr2==arr1
not_equal:arr2!=arr1
arr1=np.array([1,2,8,1])
arr2=np.array([4,5,6,1])
print('np.mod(arr2,arr1)=',np.mod(arr2,arr1))
print('greater:arr2>arr1:',np.greater(arr2,arr1))
print('greater:arr2>=arr1:',np.greater_equal(arr2,arr1))
print('greater:arr2<arr1:',np.less(arr2,arr1))
print('greater:arr2<=arr1:',np.less_equal(arr2,arr1))
print('greater:arr2==arr1:',np.equal(arr2,arr1))
print('greater:arr2!=arr1:',np.not_equal(arr2,arr1))

 np.mod(arr2,arr1)= [0 1 6 0]

greater:arr2>arr1: [ True True False False]
greater:arr2>=arr1: [ True True False True]
greater:arr2<arr1: [False False True False]
greater:arr2<=arr1: [False False True True]
greater:arr2==arr1: [False False False True]
greater:arr2!=arr1: [ True True True False]

logical_and、logical_or、logical_xor:执行元素级别的布尔逻辑运算,相当于中缀运算符&、|、^

arr1=np.array([1,2,8,1])
arr2=np.array([4,5,6,0])
print(np.logical_or(arr1,arr2))
print(np.logical_and(arr1,arr2))
print(np.logical_xor(arr1,arr2))

 [ True True True True]

[ True True True False]
[False False False True]

power:相当于arr1**arr2

arr1=np.array([1,2,8,1])
arr2=np.array([4,5,6,0])
print(np.power(arr1,arr2))

 [     1     32 262144      1]

Numpy聚合函数

axis=0按列计算
axis=1按行计算
mean:去平均值 默认求全局的
min:最小值
max:最大值
sum:求和
std:标准差 np.sqrt(np.power(arr-arr.mean(),2)).sum()/arr.size
arr=np.array([
    [1,3,5,9],
    [2,4,6,8],
    [-5,-6,-8,-2]
])
print('arr.mean(axis=0)',arr.mean(axis=0))
print('arr.min(axis=1)',arr.min(axis=1))
print('arr.max',arr.max())
print('arr.sum(axis=1)',arr.sum(axis=1))
print('arr.std(axis=0)',arr.std(axis=0))

 arr.mean(axis=0) [-0.66666667 0.33333333 1. 5. ]

arr.min(axis=1) [ 1 2 -8]
arr.max 9
arr.sum(axis=1) [ 18 20 -21]
arr.std(axis=0) [ 3.09120617 4.49691252 6.37704216 4.96655481]

 np.where函数

xarr=np.array([-1.1,-1.2,-1.3,-1.4,-1.5])
yarr=np.array([-2.1,-2.2,-2.3,-2.4,-2.5])
condiion=xarr<yarr
result1=[x if c else y for (x,y,c) in zip(xarr,yarr,condiion)]
print(result1,type(result1))
result2=np.where(condiion,xarr,yarr)
print(result2,type(result2))

 [-2.1000000000000001, -2.2000000000000002, -2.2999999999999998, -2.3999999999999999, -2.5] <class 'list'>

[-2.1 -2.2 -2.3 -2.4 -2.5] <class 'numpy.ndarray'>

将数组中的所有异常数字替换为0,比如将NaN替换为0

arr=np.array([
    [1,2,np.NaN,4],
    [4,5,6,np.NaN],
    [7,8,9,np.NaN],
    [np.inf,np.e,np.pi,4]
])
condition=np.isnan(arr)|np.isinf(arr)
print('原始数据:')
print(arr)
print('修改后的数据:')
print(np.where(condition,0,arr))

 原始数据:

[[ 1. 2. nan 4. ]
[ 4. 5. 6. nan]
[ 7. 8. 9. nan]
[ inf 2.71828183 3.14159265 4. ]]
修改后的数据:
[[ 1. 2. 0. 4. ]
[ 4. 5. 6. 0. ]
[ 7. 8. 9. 0. ]
[ 0. 2.71828183 3.14159265 4. ]]

unique:去重操作

arr=np.array(['图书','数码','图书','小吃','小吃'])
print('原始数据:')
for i in arr:
    print(i,end=' ')
print()
print('修改后的数据:')
arr1=np.unique(arr)
for i in arr1:
    print(i,end=' ')

 原始数据:

图书 数码 图书 小吃 小吃 

修改后的数据:
图书 小吃 数码

 

 

 

adding:

Jupyter Notebook文件地址设置:

1.打开cmd,输入 jupyter notebook --generate-config 

2.打开这个配置文件,找到“c.NotebookApp.notebook_dir=‘’ ”,去掉前面的#号, 把路径改成自己的工作目录

3.配置文件修改完成后, 以后在jupyter notebook中写的代码等都会保存在 自己创建的目录中。

按以上操作之后重启Jupyter Notebook可能无效,解决方法如下:

jupyter notebook->右键->属性->将目标中的%users%去掉

 

arr=np.array([u'数学',u'语文'])不能显示字符可以在前面加u

 

jupyter上方有的Cell,里面的cell all可以一次性执行所有步骤

 

posted @ 2018-01-22 23:42  安公子  阅读(362)  评论(0编辑  收藏  举报