Numpy+pandas(一)

                                         Numpy快速入门

一.Numpy属性

import numpy as np#用简单的np代替numpy

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

print('number of dim:',array.ndim)#输出数组的维度

print('shape:',array.shape)#输出行数和;列数

print('size:',array.size)#输出元素个数

Numpy+pandas(一)_第1张图片

二.Numpy创建array

1.关键字

  • array:创建数组
  • dtype:指定数据类型
  • zeros:创建数据全为0
  • ones:创建数据全为1
  • empty:创建数据接近0
  • arrange:按指定范围创建数据
  • linspace:创建线段

2.创建数组

a = np.array([2,23,4]) # list 1d

print(a)

# [2 23 4]

3.创建指定数据dtype

a = np.array([2,23,4],dtype=np.int)

print(a.dtype)

# int 64

a = np.array([2,23,4],dtype=np.int32)

print(a.dtype)

# int32

a = np.array([2,23,4],dtype=np.float32)

print(a.dtype)

# float32

4.创建特定数据

  • 创建全0数组
a = np.zeros((3,4)) # 数据全为0,3行4列

"""

array([[ 0., 0., 0., 0.],

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

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

"""
  • 创建全1数组,同时也能指定这些特定数据的dtype
a = np.ones((3,4),dtype = np.int) # 数据为1,3行4列

"""

array([[1, 1, 1, 1],

[1, 1, 1, 1],

[1, 1, 1, 1]])

"""
  • 创建全空数组,其实每个值都是接近0的数组
a = np.empty((3,4)) # 数据为empty,3行4列

"""

array([[ 0.00000000e+000, 4.94065646e-324, 9.88131292e-324,

1.48219694e-323],

[ 1.97626258e-323, 2.47032823e-323, 2.96439388e-323,

3.45845952e-323],

[ 3.95252517e-323, 4.44659081e-323, 4.94065646e-323,

5.43472210e-323]])

"""
  • 用arrange创建连续数组
a = np.arange(10,20,2) # 10-19 的数据,2步长

"""

array([10, 12, 14, 16, 18])

"""
  • 用reshape改变数组形状
a = np.arange(12).reshape((3,4)) # 3行4列,0到11

"""

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

[ 4, 5, 6, 7],

[ 8, 9, 10, 11]])

"""
  • 用linspace创建线段型数组
a = np.linspace(1,10,20) # 开始端1,结束端10,且分割成20个数据,生成线段

"""

array([ 1. , 1.47368421, 1.94736842, 2.42105263,

2.89473684, 3.36842105, 3.84210526, 4.31578947,

4.78947368, 5.26315789, 5.73684211, 6.21052632,

6.68421053, 7.15789474, 7.63157895, 8.10526316,

8.57894737, 9.05263158, 9.52631579, 10. ])

"""
  • 同样也能reshape工作:
a = np.linspace(1,10,20) # 开始端1,结束端10,且分割成20个数据,生成线段

"""

array([ 1. , 1.47368421, 1.94736842, 2.42105263,

2.89473684, 3.36842105, 3.84210526, 4.31578947,

4.78947368, 5.26315789, 5.73684211, 6.21052632,

6.68421053, 7.15789474, 7.63157895, 8.10526316,

8.57894737, 9.05263158, 9.52631579, 10. ])

"""

三.Numpy的几种基本运算

1.若a,b都是维数一样的矩阵,可以直接进行+、-、*、/操作,都是在对应元素上进行基本运算,要注意的是如果要实现矩阵各个元素的乘方需要依赖双星符号**。

import numpy as np

a=np.array([10,20,30,40]) # array([10, 20, 30, 40])

b=np.arange(4) # array([0, 1, 2, 3])

c=a-b # array([10, 19, 28, 37])

c=a+b # array([10, 21, 32, 43])

c=a*b # array([ 0, 20, 60, 120])

c=b**2 # array([0, 1, 4, 9])

2.矩阵相乘

c_dot = np.dot(a,b)

# array([[2, 4],

# [2, 3]])

c_dot_2 = a.dot(b)

# array([[2, 4],

# [2, 3]])

3.内置函数 sum(), min(), max(),当axis的值为0的时候,将会以列作为查找单元, 当axis的值为1的时候,将会以行作为查找单元。

import numpy as np

a=np.random.random((2,4))

print(a)

# array([[ 0.94692159, 0.20821798, 0.35339414, 0.2805278 ],

# [ 0.04836775, 0.04023552, 0.44091941, 0.21665268]])

np.sum(a) # 4.4043622002745959

np.min(a) # 0.23651223533671784

np.max(a) # 0.90438450240606416

print("a =",a)

# a = [[ 0.23651224 0.41900661 0.84869417 0.46456022]

# [ 0.60771087 0.9043845 0.36603285 0.55746074]]



print("sum =",np.sum(a,axis=1))

# sum = [ 1.96877324 2.43558896]



print("min =",np.min(a,axis=0))

# min = [ 0.23651224 0.41900661 0.36603285 0.46456022]



print("max =",np.max(a,axis=1))

# max = [ 0.84869417 0.9043845 ]

4.其他操作函数

  • argmin(),argmax():两个函数分别对应着求矩阵中最小元素和最大元素的索引。
  • mean(),average():求矩阵均值
  • median():求解中位数
  • cunsum():累加函数,生成的每一项矩阵元素均是从原矩阵首项累加到对应项的元素之和。得到新矩阵的元素数量和原来一致
  • diff():累差运算,该函数计算的便是每一行中后一项与前一项之差,得到新矩阵的元素数量和原来不一致
  • nonzero():输出矩阵中非0元素的位置,这个函数将所有非零元素的行与列坐标分割开,重构成两个分别关于行和列的矩阵。所以最终输出的是关于原矩阵不为0 元素的行坐标和列坐标。
  • sort():将矩阵的元素每行从小到大排序
  • transpose(A),A.T:矩阵A的转置
  • clip(Array,Array_min,Array_max):顾名思义,Array指的是将要被执行用的矩阵,而后面的最小值最大值则用于让函数判断矩阵中元素是否有比最小值小的或者比最大值大的元素,并将这些指定的元素转换为最小值或者最大值。
import numpy as np

A = np.arange(2, 14).reshape((3, 4))

# array([[ 2, 3, 4, 5]

# [ 6, 7, 8, 9]

# [10,11,12,13]])

print(np.argmin(A)) # 0

print(np.argmax(A)) # 11

#求均值的两种方法

print(np.mean(A)) # 7.5

print(np.average(A)) # 7.5

#求中位数

print(A.median()) # 7.5

#累加函数

print(np.cumsum(A))

# [2 5 9 14 20 27 35 44 54 65 77 90]元素数量和初始矩阵一致

#累差运算

print(np.diff(A))

# [[1 1 1]

# [1 1 1]

# [1 1 1]]

#求非0元素位置的函数

print(np.nonzero(A))

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

#排序函数

A = np.arange(14,2, -1).reshape((3,4))

# array([[14, 13, 12, 11],

# [10, 9, 8, 7],

# [ 6, 5, 4, 3]])

print(np.sort(A))

# array([[11,12,13,14]

# [ 7, 8, 9,10]

# [ 3, 4, 5, 6]])

#转置函数

print(np.transpose(A))

print(A.T)

# array([[14,10, 6]

# [13, 9, 5]

# [12, 8, 4]

# [11, 7, 3]])

# array([[14,10, 6]

# [13, 9, 5]

# [12, 8, 4]

# [11, 7, 3]])

#clip()函数

print(A)

# array([[14,13,12,11]

# [10, 9, 8, 7]

# [ 6, 5, 4, 3]])

print(np.clip(A,5,9))

# array([[ 9, 9, 9, 9]

# [ 9, 9, 8, 7]

# [ 6, 5, 5, 5]])

四.Numpy索引

1.一维索引

  • 在元素列表或者数组中,我们可以用如同a[2]一样的表示方法,同样的,在Numpy中也有相对应的表示方法:
import numpy as np

A = np.arange(3,15)

# array([3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])

print(A[3]) # 6
  • 将矩阵转换为二维的,此时进行同样的操作,实际上这时的A[2]对应的就是矩阵A中第三行(从0开始算第一行)的所有元素。
A = np.arange(3,15).reshape((3,4))

"""

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

[ 7, 8, 9, 10]

[11, 12, 13, 14]])

"""

print(A[2])

# [11 12 13 14]

2.二维索引

  • 可以用与二维数组一样的操作进行元素搜索,如A[1,1]
  • 切片操作和list也一样,同时利用for函数逐行输出
  • 逐列输出只需要把数组进行转置即可
  • flatten是一个展开性质的函数,将多维的矩阵进行展开成1行的数列。而flat是一个迭代器,本身是一个object属性。flat属性可以用于元素逐个打印中。
import numpy as np

A = np.arange(3, 15).reshape((3, 4))

"""

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

[ 7, 8, 9, 10]

[11, 12, 13, 14]])

"""

print(A[2])

# [11 12 13 14]



#表示单个元素有两种表示方法:

print(A[1][1]) # 8

print(A[1, 1]) # 8



#切片操作

print(A[1, 1:3]) # [8 9]



#逐行打印

for row in A:

print(row)

"""

[ 3, 4, 5, 6]

[ 7, 8, 9, 10]

[11, 12, 13, 14]

"""



#逐列打印

for column in A.T:

print(column)

"""

[ 3, 7, 11]

[ 4, 8, 12]

[ 5, 9, 13]

[ 6, 10, 14]

"""



#迭代输出

A = np.arange(3, 15).reshape((3, 4))



print(A.flatten())

# array([3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])



for item in A.flat:

print(item)



# 3

# 4

#……

# 14

3.Numpy array合并

  • 按行合并(上下合并):np.vstack()
  • 按列合并(左右合并):np,hstack()
  • 转置:np.newaxis()
  • 合并操作多个数组:np.concatenate(array,axis=0),axis=0横向打印,axis=1纵向打印。
import numpy as np

A = np.array([1, 1, 1])

B = np.array([2, 2, 2])



#按行合并

print(np.vstack((A, B))) # vertical stack

"""

[[1,1,1]

[2,2,2]]

"""

C = np.vstack((A,B))

print(A.shape,C.shape)

# (3,) (2,3)



#按列合并

D = np.hstack((A,B)) # horizontal stack

print(D)

# [1,1,1,2,2,2]

print(A.shape,D.shape)

# (3,) (6,)



#用newaxis()进行转置操作

print(A[np.newaxis,:])

# [[1 1 1]]

print(A[np.newaxis,:].shape)

# (1,3)

print(A[:,np.newaxis])

"""

[[1]

[1]

[1]]

"""

print(A[:,np.newaxis].shape)

# (3,1)

A = np.array([1, 1, 1])[:, np.newaxis]

B = np.array([2, 2, 2])[:, np.newaxis]



C = np.vstack((A, B)) # vertical stack

D = np.hstack((A, B)) # horizontal stack

print(D)

"""

[[1 2]

[1 2]

[1 2]]

"""

print(A.shape, D.shape)

# (3,1) (3,2)



#合并多个数组

C = np.concatenate((A,B,B,A),axis=0)

print(C)

"""

array([[1],

[1],

[1],

[2],

[2],

[2],

[2],

[2],

[2],

[1],

[1],

[1]])

"""

D = np.concatenate((A,B,B,A),axis=1)

print(D)

"""

array([[1, 2, 2, 1],

[1, 2, 2, 1],

[1, 2, 2, 1]])

""

4.numpy array分割

  • split(array,num,axis=0):num代表分割后生成的矩阵数量,axis=0是横向切割,axis=1是纵向切割
  • np.array_split(array,num,axis=0):不等量分割
  • np.vsplit(array,num):横向分割
  • np.hsplit(array.num):纵向分割
import numpy as np

A = np.arange(12).reshape((3, 4))

print(A)

"""

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

[ 4, 5, 6, 7],

[ 8, 9, 10, 11]])

"""

#split用法:纵向分割,横向分割

print(np.split(A, 2, axis=1))

"""

[array([[0, 1],

[4, 5],

[8, 9]]), array([[ 2, 3],

[ 6, 7],

[10, 11]])]

"""

print(np.split(A, 3, axis=0))

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

#不等量分割

print(np.array_split(A, 3, axis=1))

"""

[array([[0, 1],

[4, 5],

[8, 9]]), array([[ 2],

[ 6],

[10]]), array([[ 3],

[ 7],

[11]])]

"""

#其他分割

print(np.vsplit(A, 3)) #等于 print(np.split(A, 3, axis=0))



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





print(np.hsplit(A, 2)) #等于 print(np.split(A, 2, axis=1))

"""

[array([[0, 1],

[4, 5],

[8, 9]]), array([[ 2, 3],

[ 6, 7],

[10, 11]])]

"""

五.Numpy的深copy和浅copy

import numpy as np

a = np.arange(4)

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

b = a

c = a

d = b

注:

  • 通过赋值语句,a,b,c,d都关联在一起,改变a的值,b,c,d的值也会跟着变换
  • 若使用b=a.copy(),这就是深copy,a和b没有关联性,改变a的值并不会影响b

 

六.Numpy的其他小知识

1.产生随机数的函数

  • numpy.random.randn(d0, d1, …, dn):是从标准正态分布中返回一个或多个样本值。
  • numpy.random.rand(d0, d1, …, dn):随机样本位于[0, 1)中。

你可能感兴趣的:(Tensorflow)