numpy常用方法属性详解

方法讲解

 

array

 

生产矩阵,array当中的元素必须是相同的结构

 

例子:

 

import numpy as np

 

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

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

 

 

 

 

arange

 

生成矩阵

 

例子:

 

# 生成指定大小的矩阵

a = np.arange(15)

 

# 生成一个等差数列的矩阵,第一个参数是起始值,第二个参数是终值(<终值),第三个参数是公差

b = np.arange(10, 30, 5)

 

print(a)

print(b)

 

[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]

 

[10 15 20 25]

 

 

 

 

shape

 

查看矩阵结构

 

例子:

 

import numpy as np

 

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

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

 

print(a.shape)

print(b.shape)

 

输出如下:

 

(3,)

(2,3)

 

一维矩阵直接打印出元素个数

二维矩阵打印出矩阵的行和列的个数

 

 

 

 

size

 

查看矩阵元素个数

 

例子:

 

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

 

print(a.size)

 

输出如下:

 

15

 

 

 

 

ndim

 

矩阵唯度

 

例子:

 

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

 

print(a.ndim)

 

输出如下:

 

2

 

 

 

 

dtype

 

查看矩阵内部的数据类型

 

例子:

 

import numpy as np

 

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

 

print(a.dtype)

 

输出如下:

 

int32

 

 

 

 

astype

 

矩阵类型转换

 

例子:

 

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

 

print(a)

print(a.dtype)

 

b = a.astype(float)

 

print(b)

print(b.dtype)

 

输出如下:

 

['1' '2' '3']

<U1

[1. 2. 3.]

float64

 

 

 

 

sum

 

求和

 

例子:

 

a = np.array([

[5, 10, 15],

[20, 25, 30],

[35, 40, 45]

])

 

b = a.sum(axis=1)

 

print(b)

 

c = a.sum(axis=0)

 

print(c)

 

输出如下:

 

[ 30 75 120]

 

[60 75 90]

 

 

axis = 1 时,是按行求和

axis = 0 时, 是按列求和

 

 

 

 

dot

 

矩阵的点乘。首先,一维矩阵不能点乘一维矩阵,一维矩阵可以点乘二维矩阵,二维矩阵不能点乘一维矩阵,二维矩阵可以点乘二维矩阵。矩阵点乘后会生成一个和A行列相同的矩阵,矩阵中第n行的第p个元素的值,就是A中第n行每一个元素与B中第p列对应位置的每一个元素相乘后的求和。

 

例子:

 

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

 

b = np.array([[1, 2],

[3, 4]])

 

c = np.array([[2, 0],

[3, 4]])

 

# 下面式子的结果为 [[2*1 + 3*3 2*2+3*4]] = [[11 16]]

d = np.dot(a, b)

 

# e和f表示的意思相同,都表示前一个数和后一个数的点乘,只是写法不同

# 结果为:[[1*2+2*3 1*0+2*4], [3*2+4*3 3*0+4*4]]

e = np.dot(b, c)

f = b.dot(c)

 

 

print(d)

print(e)

print(f)

 

输出如下:

 

[[11 16]]

 

[[ 8 8]

[18 16]]

 

[[ 8 8]

[18 16]]

 

 

 

 

random

 

生成随机数矩阵

 

例子:

 

# 生成随机数矩阵,范围是-1到+1

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

print(a)

 

输出如下:

 

[[0.70269028 0.86374853 0.04578158]

[0.25137128 0.08898347 0.91946659]]

 

 

 

 

exp

 

原始矩阵A经过exp方法后生产一个同样行列的矩阵B,矩阵B中的每个元素的值对应矩阵A中每个元素值个e相乘得到的。

 

例子:

 

a = np.arange(3)

# 结果为:[e^0, e^1, e^2]

b = np.exp(a)

 

print(a)

print(b)

 

输出如下:

 

[0 1 2]

 

[1. 2.71828183 7.3890561 ]

 

 

 

 

sqrt

 

开根号,原始矩阵A经过exp方法后生产一个同样行列的矩阵B,矩阵B中的每个元素是值,是矩阵A中对应元素开根号后得到的值。

 

例子:

 

a = np.arange(3)

 

b = np.sqrt(a)

 

print(a)

print(b)

 

输出如下:

 

[0 1 2]

 

[0. 1. 1.41421356]

 

 

 

 

floor

 

向下取整

 

例子:

 

a = np.floor(10*np.random.random((3, 4)))

 

print(a)

 

输出如下:

 

[[3. 2. 1. 9.]

[8. 0. 8. 0.]

[3. 1. 3. 9.]]

 

 

 

 

hstack和vstack

 

hstack矩阵横向叠加,vstack矩阵纵向叠加

 

例子:

 

a = np.floor(10*np.random.random((2, 2)))

b = np.floor(10*np.random.random((2, 2)))

 

c = np.hstack((a, b))

d = np.vstack((a, b))

 

print(a)

print(b)

print(c)

print(d)

 

输出如下:

 

[[3. 8.]

[6. 1.]]

 

[[4. 9.]

[8. 3.]]

 

[[3. 8. 4. 9.]

[6. 1. 8. 3.]]

 

[[3. 8.]

[6. 1.]

[4. 9.]

[8. 3.]]

 

 

 

 

linspace

 

生成指定元素个数的等差数列

 

例子:

 

# pi 近似 3.14

from numpy import pi

 

# 以第一个参数为第一个元素,第二个参数为最后一个元素,均等的生成100个元素的矩阵

a = np.linspace(0, 2*pi, 100)

 

print(a)

 

输出如下:

 

[0. 0.06346652 0.12693304 0.19039955 0.25386607 0.31733259

0.38079911 0.44426563 0.50773215 0.57119866 0.63466518 0.6981317

0.76159822 0.82506474 0.88853126 0.95199777 1.01546429 1.07893081

1.14239733 1.20586385 1.26933037 1.33279688 1.3962634 1.45972992

1.52319644 1.58666296 1.65012947 1.71359599 1.77706251 1.84052903

1.90399555 1.96746207 2.03092858 2.0943951 2.15786162 2.22132814

2.28479466 2.34826118 2.41172769 2.47519421 2.53866073 2.60212725

2.66559377 2.72906028 2.7925268 2.85599332 2.91945984 2.98292636

3.04639288 3.10985939 3.17332591 3.23679243 3.30025895 3.36372547

3.42719199 3.4906585 3.55412502 3.61759154 3.68105806 3.74452458

3.8079911 3.87145761 3.93492413 3.99839065 4.06185717 4.12532369

4.1887902 4.25225672 4.31572324 4.37918976 4.44265628 4.5061228

4.56958931 4.63305583 4.69652235 4.75998887 4.82345539 4.88692191

4.95038842 5.01385494 5.07732146 5.14078798 5.2042545 5.26772102

5.33118753 5.39465405 5.45812057 5.52158709 5.58505361 5.64852012

5.71198664 5.77545316 5.83891968 5.9023862 5.96585272 6.02931923

6.09278575 6.15625227 6.21971879 6.28318531]

 

 

 

 

ravel

 

矩阵扁平化

 

例子:

 

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

print(a.ravel())

 

输出如下:

 

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

 

 

 

 

where

 

条件转换

 

例子:

 

import pandas as pd

 

file = 'data.csv'

 

df = pd.read_csv(file, header=None)

 

y = df.loc[0:100, 4].values

 

# 数组中的元素为Iris-setosa的都转为-1,其他的都转为1

y = np.where(y == 'Iris-setosa', -1, 1)

 

 

 

 

reshape

 

重定义矩阵的shape,把一维矩阵转化为二维矩阵

 

例子:

 

import numpy as np a = np.arange(8) print (a)

# 重定义矩阵a的shape,把一维矩阵改为4行2列的二维矩阵,第一个参数代表二维矩阵的行 b = a.reshape(4,2)

# 重定义矩阵a的shape

a.shape = (4, 2)

 

# 对二维矩阵来说,确定了其中一个元素,比如确定了行,列是会自动生成的,让其自动生成可以输入-1

c = a.reshape(4, -1)

a.shape = (2, -1) print (b)

print (a)

print (c)

print (a)

 

输出如下:

 

[0 1 2 3 4 5 6 7]

 

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

 

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

 

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

 

[[0 1 2 3]

[4 5 6 7]]

 

 

 

 

zeros

 

创建一个初始值为0的矩阵

 

例子:

 

a = np.zeros(3)

b = np.zeros((3, 4))

 

print(a)

print(b)

 

输出如下:

 

[0. 0. 0.]

 

[[0. 0. 0. 0.]

[0. 0. 0. 0.]

[0. 0. 0. 0.]]

 

 

 

 

ones

 

创建一个初始值为1的矩阵

 

例子:

 

# dtype可以指定创建的矩阵类型

a = np.ones(3, dtype=np.int32)

b = np.ones((3, 4), dtype=np.int32)

 

print(a)

print(b)

 

输出如下:

 

[1. 1. 1.]

 

[[1. 1. 1. 1.]

[1. 1. 1. 1.]

[1. 1. 1. 1.]]

 

 

 

 

transpose与.T

 

transpose和.T的功能大致相同,都是转置数组

 

例子:

 

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

 

print (a ) print (np.transpose(a))

 

print(a.T)

 

输出如下:

 

[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]]

 

[[ 0 4 8] [ 1 5 9] [ 2 6 10] [ 3 7 11]]

 

[[ 0 4 8] [ 1 5 9] [ 2 6 10] [ 3 7 11]]

 

 

 

 

hsplit和vsplit

 

hsplit是把矩阵横向切分成多份,vsplit是把矩阵纵向切分成多份

 

例子:

 

a = np.floor(10*np.random.random((2,12)))

 

# 把矩阵横向均等地切分为三份

b = np.hsplit(a, 3)

 

# 在指定元素后进行切分,下面的代码是横向在第三个元素后面切一刀,再横向在第四个元素后面切一刀

c = np.hsplit(a, (3, 4))

 

d = a.T

 

# 把矩阵纵向均等地切分为三份

e = np.vsplit(d, 3)

 

print(a)

print(b)

print(c)

print(d)

print(e)

 

输出如下:

 

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

[5. 0. 6. 7. 4. 2. 4. 7. 0. 4. 9. 3.]]

 

[array([[4., 2., 1., 8.],

[5., 0., 6., 7.]]), array([[5., 4., 8., 8.],

[4., 2., 4., 7.]]), array([[2., 3., 8., 6.],

[0., 4., 9., 3.]])]

 

[array([[4., 2., 1.],

[5., 0., 6.]]), array([[8.],

[7.]]), array([[5., 4., 8., 8., 2., 3., 8., 6.],

[4., 2., 4., 7., 0., 4., 9., 3.]])]

 

[[4. 5.]

[2. 0.]

[1. 6.]

[8. 7.]

[5. 4.]

[4. 2.]

[8. 4.]

[8. 7.]

[2. 0.]

[3. 4.]

[8. 9.]

[6. 3.]]

 

[array([[4., 5.],

[2., 0.],

[1., 6.],

[8., 7.]]), array([[5., 4.],

[4., 2.],

[8., 4.],

[8., 7.]]), array([[2., 0.],

[3., 4.],

[8., 9.],

[6., 3.]])]

 

 

 

 

argmax

 

找出最大值所在的下标

 

例子:

 

# 生成一个正弦函数区间的矩阵,并把矩阵转为五行四列的二维矩阵

data = np.sin(np.arange(20)).reshape(5, 4)

 

# 找出最大值所在的下表, axis = 0代表按列查找, axis=1代表按行查找

ind = data.argmax(axis = 0)

 

# 找出指定坐标下的元素,range(data.shape[1])是分别从[0,1,2,3]列下面查找

data_max = data[ind, range(data.shape[1])]

 

print(data)

print(ind)

print(data_max)

 

输出如下:

 

[[ 0. 0.84147098 0.90929743 0.14112001]

[-0.7568025 -0.95892427 -0.2794155 0.6569866 ]

[ 0.98935825 0.41211849 -0.54402111 -0.99999021]

[-0.53657292 0.42016704 0.99060736 0.65028784]

[-0.28790332 -0.96139749 -0.75098725 0.14987721]]

 

[2 0 3 1]

 

[0.98935825 0.84147098 0.99060736 0.6569866 ]

 

 

 

 

tile

 

把矩阵复制后进行扩展

 

例子:

 

a = np.arange(0, 40, 10)

 

b = np.tile(a, (2, 3))

 

print(a)

 

print(b)

 

输出如下:

 

[ 0 10 20 30]

 

[[ 0 10 20 30 0 10 20 30 0 10 20 30]

[ 0 10 20 30 0 10 20 30 0 10 20 30]]

 

 

 

 

sort

 

矩阵排序

 

例子:

 

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

 

# 按行排序

b = np.sort(a, axis=1)

 

# 按列排序

c = np.sort(a, axis=0)

 

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

 

# 按元素从小到大排序,用元素对应的下标来生成对应的新矩阵

e = np.argsort(d)

 

# 让矩阵以指定的下标进行排序

f = d[e]

 

print(a)

print(b)

print(c)

print(d)

print(e)

print(f)

 

输入如下:

 

[[4 3 5]

[1 2 1]]

 

[[3 4 5]

[1 1 2]]

 

[[1 2 1]

[4 3 5]]

 

[4 3 1 2]

 

[2 3 1 0]

 

[1 2 3 4]

 

 

 

 

meshgrid

 

例子:

 

import numpy as np

 

a = array([ 0. , 0.25, 0.5 , 0.75, 1. ])

 

b = array([ 0. , 0.5, 1. ])

 

A, B = np.meshgrid(a,b)

 

print(A)

 

print(B)

 

 

输出如下:

 

array([[ 0. , 0.25, 0.5 , 0.75, 1. ],

[ 0. , 0.25, 0.5 , 0.75, 1. ],

[ 0. , 0.25, 0.5 , 0.75, 1. ]])

 

 

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

[ 0.5, 0.5, 0.5, 0.5, 0.5],

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

 

 

meshgrid函数接收两个一维矩阵的入参a和b,会生成两个二维矩阵A和B

A的行数为b的元素个数(既b.shape),A的每一行数据都是a,也就是说,A是一个由b.shape个a组成的二维矩阵。

B的行数为b的元素个数(既b.shape),B的第n行数据是b的第n个元素重复a.shape次组成的一维矩阵,也就是说,B是每一行对应b的每一个元素重复a.shape次的一维矩阵组成的二维矩阵。

 

 

 

 

 

矩阵运算

 

==

 

判断矩阵中是否存在某个值

 

例子:

 

import numpy as np

 

a = np.array([5, 10, 15, 20])

 

b = np.array([5, 10, 15], [20, 25, 30], [35, 40, 45])

 

print(a == 10)

 

print(b == 25)

 

输出如下:

 

[False True False False]

 

[[False False False]

[False True False]

[False False False]]

 

== 会把矩阵A中的所有元素和目标值进行对比,生成一个同样的行列类型为boolean类型的矩阵B,矩阵B中每个元素的值为True或False,也就是矩阵A在该位置的值若是与目标祥等,对应矩阵B中同样位置的值为True,反之则为False。若是>、<等判断,也会返回类似的矩阵。

 

以上boolean类型的矩阵B还可以对矩阵A进行索引。

 

例子:

 

import numpy as np

 

a = np.array([[5, 10, 15], [20, 25, 30], [35, 40, 45]])

 

b = a == 25

 

print(a)

print(b)

print(a[b])

 

输出如下:

 

[[ 5 10 15]

[20 25 30]

[35 40 45]]

 

[[False False False]

[False True False]

[False False False]]

 

[25]

 

 

 

 

&

 

与操作

 

例子:

 

a = np.array([5, 10, 15, 20])

 

b = (a == 5) & (a == 10)

 

print(b)

 

输出如下:

 

[False False False False]

 

 

 

|

 

或操作

 

例子:

 

a = np.array([5, 10, 15, 20])

 

b = (a == 5) | (a == 10)

 

print(b)

 

输出如下:

 

[ True True False False]

 

 

 

 

+、-

 

数字类型的矩阵元素个数相同时,可以进行加减运算,结果是对应位置的每个元素单独加减后的结果矩阵。矩阵还可以和指定数字做加减,结果为每个元素单独和指定数字做加减。

 

例子:

 

a = np.array([5, 10, 15, 20, 25])

 

b = np.arange(5)

 

print(a)

print(b)

 

c = a - b

 

d = c - 1

print(c)

print(d)

 

输出如下:

 

[ 5 10 15 20 25]

 

[0 1 2 3 4]

 

[ 5 9 13 17 21]

 

[ 4 8 12 16 20]

 

 

 

 

*

 

数字类型的矩阵元素个数相同时,还可以进行乘法运算,结果是对应位置的每个元素单独相乘后的结果矩阵。矩阵还可以和指定数字相乘,结果为每个元素单独和指定数字相乘。

 

例子:

 

a = np.array([[1, 1],

[0, 1]])

 

b = np.array([[2, 0],

[3, 4]])

 

c = a*b

 

d = c*2

 

print(c)

print(d)

 

输出如下:

 

[[2 0]

[0 4]]

 

[[4 0]

[0 8]]

 

 

 

 

**

 

求矩阵的平方

 

例子:

 

a = np.arange(5)

 

b = a**2

 

print(a)

print(b)

 

输出如下:

 

[0 1 2 3 4]

[ 0 1 4 9 16]

 

 

 

 

替换

 

把矩阵中的某些元素替换成指定值

 

例子:

 

a = np.array([5, 10, 15, 20])

 

b = (a == 5) | (a == 10)

 

a[b] = 50

 

print(a)

 

输出如下:

 

[50 50 15 20]

 

 

 

 

 

拷贝问题

 

归纳:=是赋值操作,在内存中共用id与值,view是浅拷贝,在内存中不共用id,但是共用值,copy是深拷贝,在内存中不共用id,也不共用值。

 

=

 

赋值操作,在内存中共用id与源数据

 

例子:

 

a = np.arange(12)

b = a

 

print(a)

print(b)

 

# 改变b指向的值,a也会跟着改变

b.shape = (3, 4)

 

print(a is b)

 

print(id(a))

print(id(b))

 

print(a)

print(b)

 

输出如下:

 

[ 0 1 2 3 4 5 6 7 8 9 10 11]

 

[ 0 1 2 3 4 5 6 7 8 9 10 11]

 

True

 

2448230632384

 

2448230632384

 

[[ 0 1 2 3]

[ 4 5 6 7]

[ 8 9 10 11]]

 

[[ 0 1 2 3]

[ 4 5 6 7]

[ 8 9 10 11]]

 

 

 

 

view

 

浅拷贝,复制一份共享源数据的新数据

 

a = np.arange(12)

b = a.view()

 

print(a)

print(b)

 

 

b.shape = (3, 4)

# 改变b指向的值,a也会跟着改变

b[0, 3] = 999

 

print(a is b)

 

print(id(a))

print(id(b))

 

print(a)

print(b)

 

输出如下:

 

[ 0 1 2 3 4 5 6 7 8 9 10 11]

 

[ 0 1 2 3 4 5 6 7 8 9 10 11]

 

False

 

2689698089920

 

2689728226928

 

[ 0 1 2 999 4 5 6 7 8 9 10 11]

 

[[ 0 1 2 999]

[ 4 5 6 7]

[ 8 9 10 11]]

 

 

 

 

copy

 

深拷贝

 

a = np.arange(12)

b = a.copy()

 

print(a)

print(b)

 

 

b.shape = (3, 4)

# 改变b指向的值,a不会跟着改变

b[0, 3] = 999

 

print(a is b)

 

print(id(a))

print(id(b))

 

print(a)

print(b)

 

输出如下:

 

[ 0 1 2 3 4 5 6 7 8 9 10 11]

 

[ 0 1 2 3 4 5 6 7 8 9 10 11]

 

False

 

1916472249200

 

1916502320672

 

[ 0 1 2 3 4 5 6 7 8 9 10 11]

 

[[ 0 1 2 999]

[ 4 5 6 7]

[ 8 9 10 11]]

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值