当前位置:   article > 正文

Numpy入门_tmp = np.zeros(2**n)

tmp = np.zeros(2**n)

Numpy矩阵运算库

使用前导入numpy

import numpy as np
  • 1

读取数据

1. 从文件中读取数据

  • np.genfromtxt(文件名,分隔符,数据类型)
# 假定此文件分隔符为“,”,每个数据类型均为字符类型
data = np.genfromtxt("data.dat", delimiter=",", dtype=str)
  • 1
  • 2
data = np.genfromtxt("data.dat", delimiter=",", dtype=str)
print(data)
  • 1
  • 2
[['a' '1']
 ['b' '2']
 ['c' '3']
 ['d' '4']
 ['e' '5']]
  • 1
  • 2
  • 3
  • 4
  • 5

Numpy的核心:ndarray

np.array()负责将传入的数据转化为ndarray格式的矩阵

ndarray内的数据类型相同,如果传入参数时存在转换,则向高类型转换

# 传入一维数组
vector1 = np.array([1,2,3,4,5])

# 传入二维数组
vector2 = np.array([[1,2,3], [3,4,5], [4,5,6]])
  • 1
  • 2
  • 3
  • 4
  • 5
# 传入一维数组
vector1 = np.array([1, 2, 3, 4, 5])

# 传入二维数组
vector2 = np.array([[1, 2, 3], [3, 4, 5], [4, 5, 6]])

print("vector1 is :\n", vector1)
print("vector2 is :\n", vector2)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
vector1 is :
 [1 2 3 4 5]
vector2 is :
 [[1 2 3]
 [3 4 5]
 [4 5 6]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

查看矩阵结构/维数(行数列数):npName.shape

print(vector2.shape)

查看矩阵内元素的数据类型:npName.dtype

print(vector2.dtype)

print(vector2.shape)
print(vector2.dtype)
  • 1
  • 2
(3, 3)
int32
  • 1
  • 2

矩阵数据的读取

  • 直接访问

npName[第一维, 第二维,……, 第n维]

  • 切片

npName[1:3]

  • 截取某列

    比如取第二列
    
    • 1

npName[:, 1]

  • 截取某几列

    比如第2到3列
    
    • 1

npName[:, 1:3]

  • 截取某一块(第几行的第几列)

    比如第一行到第二行的第一列到第二列
    
    • 1

npName[0:2, 0:2]

print(vector2[:, 1])
print()
print(vector2[:, 1:3])
print()
print(vector2[0:2, 0:2])
  • 1
  • 2
  • 3
  • 4
  • 5
[2 4 5]

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

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

Numpy 运算

1. Numpy数据的判断


# 判断vector1中的元素是否等于3,如果等于,返回True,反之返回False
tmp = vector1 == 3
  • 1
  • 2
  • 3

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

  • tips: 得到的数组可作为列表索引,npName[tmp]可将对应为True的元素检出。
vector1 == 3
  • 1
array([False, False,  True, False, False])
  • 1
vector2 == 4
  • 1
array([[False, False, False],
       [False,  True, False],
       [ True, False, False]])
  • 1
  • 2
  • 3
tmp = (vector2 == 4)
  • 1
vector2[tmp]
  • 1
array([4, 4])
  • 1

2. 更改数据类型

npNmae = npName.astype(type)
  • 1
tmp = np.array(["1", "1", "1", "1"])
print(tmp.dtype)

# 更改类型为int
tmp = tmp.astype(int)
print(tmp.dtype)

# 更改类型为float
tmp = tmp.astype(float)
print(tmp.dtype)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
<U1
int32
float64
  • 1
  • 2
  • 3

3. 运算

3.1 四则运算
3.1.1 加
  • 按每行加

    npName.sum(axis = 1)

  • 按每列加

    npName.sum(axis = 0)

3.1.2 减
  • 两个矩阵相减

    要求维数以及行列数严格相同,就是矩阵减法

  • 矩阵减去一个数

    矩阵内每个元素均减去那个数

3.1.3 乘
  • 乘方

npName**n 即为n次方

  • * 对应位置相乘

  • 严格的矩阵乘法

A.dot(B)

np.dot(A, b)

print(vector2, "\n")

# 按行相加
print("按行相加:", vector2.sum(axis=1), "\n")

# 按列相加
print("按列相加:", vector2.sum(axis=0))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
[[1 2 3]
 [3 4 5]
 [4 5 6]] 

按行相加: [ 6 12 15] 

按列相加: [ 8 11 14]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
3.2 arange()函数
np.arange(start = 0, end, step = 1)会生成一个一维的从0到n-1的整数数组
  • 1

Tips: 步长可调

tmp = np.arange(6)

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

3.3 reshape()函数
npName.reshape(行数m,列数n)可返回一个将npName矩阵变为m*n后的矩阵
  • 1

new_tmp = tmp.reshape(2,3)

tmp = np.arange(15)
print(tmp, "\n")

tmp = tmp.reshape(5, 3)
print(tmp)
  • 1
  • 2
  • 3
  • 4
  • 5
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14] 

[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]
 [12 13 14]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
3.4 ndim 输出此矩阵的维度

npName.ndim

3.5 size 输出矩阵元素数量

npName.size

print(tmp.ndim)

print(tmp.size)
  • 1
  • 2
  • 3
2
15
  • 1
  • 2
3.6 矩阵全部初始化为0(默认类型为float)

将矩阵初始化为全为0的三行四列二维矩阵

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

3.7 矩阵全部初始化为1

将矩阵初始化为全为1的二行三列二维矩阵,且元素类型全为int
tmp = np.ones((2,3),dtype = np.int32)

3.8 np.sin() 正弦运算
返回对传入的矩阵的每个元素取正弦后的矩阵
  • 1
tmp = np.zeros((3, 4))
print(tmp, "\n")

tmp = np.ones((2, 3), dtype=np.int32)
print(tmp)
  • 1
  • 2
  • 3
  • 4
  • 5
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]] 

[[1 1 1]
 [1 1 1]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
3.9 自然常数
  • np.exp(npName)

    返回对矩阵的每个元素做e的指数运算后的矩阵

3.10 平方根
  • np.sqrt(npName)

    返回对矩阵的每个元素开平方后的矩阵

3.11 floor 向下取整
np.floor(npName) 返回向下取整的矩阵
  • 1
3.12 npName.ravel() 转换成一维向量
返回一维向量
  • 1
3.13 npName.T 转置矩阵
返回npName的转置矩阵
  • 1
3.14 矩阵拼接
  • 按行拼接 np.hstack((A, B))

    将矩阵A与B按行拼接后返回此矩阵

  • 按列拼接 np.vstack((A, B))

    将矩阵A与B按列拼接后返回此矩阵

3.15 矩阵分割
  • 按行(竖着)分割 np.hsplit(npName, n)

    将npName竖着切割为n份,并返回一个包含这三个数组的一个list

  • 指定位置切割 np.hsplit(npName, (m, n))

    在第m个元素与第n个元素之前竖着分割,返回list

  • 按列(横着)切割 np.vsplit(npName, n)

    将npName横着切割为n份,返回list

4 random模块

4.1 np.random.random(m, n)
生成一个二维m*n矩阵,数值默认从-1到+1
  • 1
4.2 np.linspace(start, end, number)
在区间内平均取number个数,返回一个一维矩阵
  • 1

5 复制

5.1 指针式拷贝

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

B = A

B和A指向同一个对象,id相同

5.2 浅拷贝

Tips: 可类比为数据库中的视图,只改变了外观没改变内容

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

B = A.view()

B和A是两个不同的对象,但是元素相同,区别仅在于表示形式可以不同

5.3 深拷贝

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

B = A.copy()

B和A就完全隔离了

# 复制示例代码

# 指针拷贝
print("指针拷贝")
A = np.zeros((3, 4))
B = A
A.shape = 2, 6
A[1, 1] = 3
print("A = ", A, "\n")
print("B = ", B, "\n\n")

# 浅拷贝
print("浅拷贝")
A = np.zeros((3, 4))
B = A.view()
A.shape = 2, 6
A[1, 1] = 3
print("A = ", A, "\n")
print("B = ", B, "\n\n")

# 深拷贝
print("深拷贝")
A = np.zeros((3, 4))
B = A.copy()
A.shape = 2, 6
A[1, 1] = 3
print("A = ", A, "\n")
print("B = ", B, "\n\n")
  • 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
指针拷贝
A =  [[0. 0. 0. 0. 0. 0.]
 [0. 3. 0. 0. 0. 0.]] 

B =  [[0. 0. 0. 0. 0. 0.]
 [0. 3. 0. 0. 0. 0.]] 


浅拷贝
A =  [[0. 0. 0. 0. 0. 0.]
 [0. 3. 0. 0. 0. 0.]] 

B =  [[0. 0. 0. 0.]
 [0. 0. 0. 3.]
 [0. 0. 0. 0.]] 


深拷贝
A =  [[0. 0. 0. 0. 0. 0.]
 [0. 3. 0. 0. 0. 0.]] 

B =  [[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 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

6

6.1 argmax找最大值

返回当行/列的最大值的索引组成的列表

  • npName.argmax(axis = 1) 按行找最大值

  • npName.argmax(axis = 0) 按列找最大值

6.2 tile 扩展

np.tile(A, (m,n))

把A作为一个元素去填充m*n矩阵
  • 1
np.tile(A,(3,4))
  • 1
array([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 3., 0., 0., 0., 3., 0., 0., 0., 3., 0., 0., 0., 3.],
       [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., 0., 0., 0., 0., 0.],
       [0., 0., 0., 3., 0., 0., 0., 3., 0., 0., 0., 3., 0., 0., 0., 3.],
       [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., 0., 0., 0., 0., 0.],
       [0., 0., 0., 3., 0., 0., 0., 3., 0., 0., 0., 3., 0., 0., 0., 3.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/1004513
推荐阅读
相关标签
  

闽ICP备14008679号