MENU

科学计算库Numpy

August 4, 2018 • Read: 394 • python

genfromtxt函数

import numpy

tmp = numpy.genfromtxt("1.txt",delimiter=",",dtype=str)
print (type(tmp))
print (tmp)
print (help(numpy.genfromtxt))

genfromtxt函数里串了三个参数,分别是 要打开的文档名称,分隔符,以什么类型存储

打印结果:
image
第一行输出的是"tmp"这个变量的类型,可以看到是个ndarray矩阵类型,然后下面输出的是矩阵的值,最后输出的是genfromtxt这个函数的帮助文档

array函数

import numpy

vector = numpy.array([5,10,15,20])
matrix = numpy.array([[5,10,15],[20,25,30],[35,40,45]])
print (vector)#[ 5 10 15 20]
print (matrix)
#[[ 5 10 15]
# [20 25 30]
# [35 40 45]]

这个太简单不说了

shape变量

import numpy

vector1 = numpy.array([[1],[2],[3]])
vector2 = numpy.array([1,2,3])
vector3 = numpy.array([[5,10,15],[20,25,30]])
print (vector1.shape)#(3, 1)
print (vector2.shape)#(3,)
print (vector3.shape)#(2,3)

shape变量就是打印矩阵的维度

取矩阵数据的问题

格式:变量名 = 矩阵名[x,y],需要注意矩阵下标从0开始

格式:变量名 = 矩阵名[x,y$_1$:$y_2$];取矩阵第x行,第$y_1$列到第$y_2$列的数据,不包含$y_2$,下标同样从0开始

格式:变量名 = 矩阵名[:,y],取第y列上的值,同理,[x,:]表示取第x行上的所有值

==运算

import numpy

vector = numpy.array([5,10,15,20])
print (vector == 10) #[False True False False]
import numpy

vector = numpy.array([5,10,15,20])
equal_to_ten = (vector == 10)
print (vector[equal_to_ten])#[10]

&、|运算

不知道为什么python里面不是两个&,而是一个&,反正只要记住在python里面逻辑与和逻辑或都是一个就行了qwq....

import numpy

vector = numpy.array([5,10,15,20])
equal_to_ten_or_five = (vector == 5) | (vector == 10)
print (equal_to_ten_or_five)#[True True False False]

astype函数

astype函数是将矩阵中所有元素的类型变为参数指定的类型

import numpy

vector = numpy.array([5,10,15,20])
print (vector.dtype)#int32
vector = vector.astype(str)
print (vector.dtype)#<U11
print (vector)#['5' '10' '15' '20']

min函数

import numpy

vector = numpy.array([[5,10,15],
                      [20,25,30],
                      [35,40,45]
                     ])
print (vector.min(axis = 1))#[5 20 35]
print (vector.min(axis = 0))#[5 10 15]
#print (help(numpy.array))

axis表示按行或列进行计算,axis=1表示按行计算,axis=0表示按列计算

sum函数

import numpy

vector = numpy.array([[5,10,15],
                      [20,25,30],
                      [35,40,45]
                     ])
print (vector.sum())#225
print (vector.sum(axis = 1))#[30 75 120]
print (vector.sum(axis = 0))#[60 75 90]

arange和reshape函数

arange(x)表示构造一个0到x-1的一维矩阵;reshape(x,y)表示将矩阵改为x行y列

import numpy as np

vector = np.arange(15)
print (vector)#[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
vector = vector.reshape(3,5)
print (vector)
#[[ 0  1  2  3  4]
# [ 5  6  7  8  9]
# [10 11 12 13 14]]

arange还有一种用法arange(start,end,c),表示的含义是构造一个起始值为start,小于end的一个公差为c的等差序列

ndim和size变量

import numpy as np

vector = np.arange(9)
vector = vector.reshape(3,3)
print (vector.ndim)#2
print (vector.size)#9

zeros和ones函数

zeros和ones分别构造全0和全1矩阵

import numpy as np

print (np.zeros((2,2),dtype = np.int32))
#[[0 0]
# [0 0]]
print (np.ones((2,3),dtype = np.int32))
#[[1 1 1]
# [1 1 1]]

random函数

import numpy as np

print (np.random.random((2,3)))#产生小于1的随机数

两个radom含义不一样,最左边的random类似于Java中包,先进入random包,然后调用random函数

linspace函数

import numpy as np
from numpy import pi

print (np.linspace(0,2*pi,100))

linspace(start,end,num),构造起始值为0,终点值为end,个数为num个的一维矩阵

矩阵运算

import numpy as np

A = np.array([[1,1],
              [0,1]])
B = np.array([[2,0],
              [3,4]])
print (A * B)#对应位置的元素相乘
print (A.dot(B))#矩阵乘法

ravel()

将n行m列的矩阵变成一行m*n列矩阵

import numpy as np
vector = np.array([[1,2,3],
                   [4,5,6],
                   [7,8,9],
                   [10,11,12]])
print (vector.ravel())
print (vector.T)#转置
print (vector.reshape(4,-1))

reshape只要有一个参数确定,另一个参数就确定了,所以另一个参数如果你懒得算,直接写-1,python会自动计算另一个维度是多少

hstack和vstack函数

hstack函数的作用是将两个矩阵横着拼接在一起;vstack是将两个矩阵竖着拼接在一起

import numpy as np

A = np.array([[1,2],
              [3,4]])
B = np.array([[5,6],
              [7,8]])
print (np.hstack((A,B)))
#[[1 2 5 6]
# [3 4 7 8]]
print (np.vstack((A,B)))
#[[1 2]
# [3 4]
# [5 6]
# [7 8]]

hsplit和vsplit函数

分割矩阵的函数

import numpy as np

A = np.array([[1,2,3,4,5,6,7,8,],[9,10,11,12,13,14,15,16]])
print (A)
print (np.hsplit(A,4))
print (np.hsplit(A,(3,4)))
print (np.vsplit(A,2))

矩阵复制

import numpy as np

A = np.arange(12)
B = A
B.shape = 3,4
print (A.shape)#(3, 4)
print (id(A))#1521835664848
print (id(B))#1521835664848

从这结果我们可以看出,python赋值是传引用

import numpy as np

A = np.arange(12)
B = A.view()
B.shape = 3,4
B[0,0] = 9
print (A[0:1])#[9]
print (A.shape)#(12,)
print (id(A))#1521835665728
print (id(B))#1521835665648

view相当于一个浅复制,虽然改变B的维度,A不变,但是如果改变A矩阵中某位置上的值,B里也会改变,反之也一样

import numpy as np

A = np.arange(12)
B = A.copy()
B.shape = 3,4
B[0,0] = 9
print (A[0:1])#[0]
print (A.shape)#(12,)
print (id(A))#1521835666208
print (id(B))#1521835665488

copy和上面两种复制不一样,copy完完全全是将两个矩阵分离开,任何操作都不会影响到对方

argmax函数

argmax寻找最大值的下标,argmax(axis=0)表示按列寻找,argmax(axis=1)表示按行寻找

import numpy as np

data = np.arange(12).reshape((3,4))
print (data.argmax(axis = 0))#[2 2 2 2]

tile函数

tile(data,(n,m)),将data矩阵扩展n行m列个

import numpy as np

data = np.arange(10,40,10)
print (np.tile(data,(2,2)))

sort函数

排序

import numpy as np

a = np.array([[4,3,5],[1,2,1]])
b = np.sort(a,axis = 1)
print (b)
#[[3 4 5]
# [1 1 2]]
最后编辑于: December 31, 2018
Archives Tip
QR Code for this page
Tipping QR Code
Leave a Comment