Numpy-Day1

1152-张同学

发表文章数:21

首页 » 数据科学库 » 正文

Numpy-Day1

序章:数组和矩阵的区别

• matrix是array的分支,matrix和array在很多时候都是通用的,用哪一个都一样;
• 如果两个可以通用,那就选择array,因为array更灵活,速度更快,很多人把二维的array也翻译成矩阵;
• 相同点:索引方式相同,都可以使用a[i] [j],a[i,j]进行索引;
• matrix(矩阵):具有相对简单的运算符号,比如两个matrix相乘(求内积),就是用符号*;
• array(数组):两个一维数组相乘用*,对应元素相乘;

1.Numpy的属性

import numpy as np

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

print(array)
print("number of dim:", array.ndim)
# number of dim: 2,二维数组

print("shape:", array.shape)
# shape: (2, 3),两行三列

print("Size:", array.size)
# Size: 6,总共6个元素

2.Numpy的创建array

import numpy as np

# 1.1 创建数组的方法
x = np.array([[1, 2, 3],
              [4, 5, 6]])

y = np.array(range(1, 7))

z = np.arange(1, 7)

print(x, y, z)
print(x.dtype)
print(type(x))
# =============================================================================

# 1.2 full创建指定值的数组
m = np.full(3, 520)
n = np.full((3, 2), 520)
print(m, "/n", n)

# =============================================================================
a = np.array([2, 3, 4], dtype=np.int64)
print(a.dtype)

# b是一个两行三列的矩阵
b = np.array([[2, 3, 4],
              [5, 6, 7]])
print(b)

# 生成值为0的3行4列的矩阵
c = np.zeros((3, 4))
print(c)

d = np.ones((3, 4))
print(d)

e = np.empty((3, 4))
print(e)

# 生成一个有序的序列
# arange相当于range
f = np.arange(10, 20, 2)
print(f)

g = np.arange(12).reshape((3, 4))
print(g)

# linspace:在指定的间隔内返回均匀间隔的数字
# 在1-10之间生成一个5个元素的序列
h = np.linspace(1, 10, 5)
print(h)

3.Numpy的基础运算

import numpy as np

a = np.array([10, 20, 30, 40])
b = np.arange(4)

# 数组的加减法
print(a, "/n", b)
c = a - b
print(c)

# 数组的比较
print(b < 3)
# [ True  True  True False]

# 矩阵的运算
x = np.array([[1, 2],
              [3, 4]])

# 生成一个0-3两行两列的矩阵
y = np.arange(4).reshape(2, 2)
# 逐个相乘
z = x * y
print(z)
# 矩阵运算
z_dot = np.dot(a, b)

# 生成一个随机矩阵
m = np.random.random((2, 4))
print(m)

# 求矩阵中的最大、最小值
print(np.max(m))
print(np.min(m))

# 求矩阵每列(axis=1)的最大值
print(np.max(m, axis=1))
# 求矩阵每行(axis=0)的最大值
print(np.min(m, axis=0))
# 求矩阵每行的和
print(np.sum(m, axis=1))

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

# argmax,argmin返回array中数值最大、最小数的索引
print(np.argmax(n))
print(np.argmin(n))

# 求平均值
print(np.mean(n))
print(n.mean())
print(np.average(n))

# 求中位数
# [1,2,3,4,5]中位数为4,[1,2,3,4,]中位数为2.5
print(np.median(n))

# cumsum:返回沿着指定轴的元素累加和所组成的数组,其形状应与输入的数组一致
print(np.cumsum(n))

# diff:沿着指定轴计算第N维的离散差值
print(np.diff(n))

# nonzero():返回值为该数组或者矩阵中非零元素的下标值构成的元组。该元组有两维,第一维是非零元素所在的行,第二维是非零元素所在的列。
print(np.nonzero(n))

# sort():默认对行维度进行排序
n1 = np.arange(14, 2, -1).reshape((3, 4))
print(n1)
# axis=0,对列维度进行排序
print(np.sort(n1, axis=0))

# transpose:相当于数学中的转置,在矩阵中,转置就是把行与列相互调换位置;
print(np.transpose(n1))
"""
[[14 10  6]
 [13  9  5]
 [12  8  4]
 [11  7  3]]
"""
# n1.T相当于矩阵的转置
print(n1.T)
print((n1.T).dot(n1))

# clip:将数组中的元素限制在a_min, a_max之间,大于a_max的就使得它等于 a_max,小于a_min,的就使得它等于a_min。
# a_min=5,a_max=9
print(np.clip(n1, 5, 9))
"""
[[9 9 9 9]
 [9 9 8 7]
 [6 5 5 5]]
"""

4.Numpy的索引

import numpy as np

a = np.arange(10)
A = np.arange(20).reshape(4, 5)

# 一维数组切片
print(a[3:9])
# 二维数组切片
print(A)
"""
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]]
"""
#  取数组A的0行0列,返回值0
print(A[0, 0])
print(A[0][0])
# 取最后一行的第2列,返回值17
print(A[-1, 2])
# 取第2行所有的列,返回array([10, 11, 12, 13, 14])
print(A[2, :])
# 取最后1行
print(A[-1])
# 取除了最后1行之外其它所有行
print(A[0:-1])
# 取0和1行,2和3列
print(A[0:2, 2:4])
# 取所有行中的第2列
print(A[:, 2])

# for循环打印A,得到的是每一行的序列
for row in A:
    print(row)

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

# 通过A.T进行transpose,再for循环打印得到的是A中的每一列
print(A.T)
"""
[[ 0  5 10 15]
 [ 1  6 11 16]
 [ 2  7 12 17]
 [ 3  8 13 18]
 [ 4  9 14 19]]
"""
for column in A.T:
    print(column)

# 将矩阵变为一维
print(A.flatten())
# [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]
# 通过flat循环打印数组的每个元素
for item in A.flat:
    print(item)

5.Numpy的array合并

import numpy as np

a = np.ones(3, )
print(a)

b = np.full(3, 2)
print(b)

# vertical stack
c = np.vstack((a, b))
print(c)
"""
[[1. 1. 1.]
 [2. 2. 2.]]
"""

# horizontal stack
d = np.hstack((a, b))
print(d)
"""
[1. 1. 1. 2. 2. 2.]
"""

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

# 给x增加一个维度
y = x[np.newaxis]
print(y, y.shape)
# [[1 2 3 4 5 6]] (1, 6)

# 增维,转置
z = x[:, np.newaxis]
print(z, z.shape)
"""
[[1]
 [2]
 [3]
 [4]
 [5]
 [6]] (6, 1)
"""

A = np.ones(3, )[:, np.newaxis]
B = np.full(3, 2)[:, np.newaxis]
print(A, "/n", B)
C = np.hstack((A, B))
print(C)
"""'
[[1. 2.]
 [1. 2.]
 [1. 2.]]
"""

# 多个array合并,axis=1横向合并,axis=0纵向合并
D = np.concatenate((A, B, B), axis=1)
print(D)

6.Numpy的array分割

import numpy as np

a = np.arange(1, 13).reshape(3, 4)
print(a)

# split(ary, indices_or_sections, axis=0):把一个数组从左到右按顺序切分
"""
参数:
ary:要切分的数组
indices_or_sections:如果是一个整数,就用该数平均切分,如果是一个数组,为沿轴切分的位置(左开右闭)
axis:沿着哪个维度进行切向,默认为0,横向切分。为1时,纵向切分
"""

print(np.split(a, 2, axis=1))
"""
[array([[ 1,  2],
       [ 5,  6],
       [ 9, 10]]), array([[ 3,  4],
       [ 7,  8],
       [11, 12]])]
"""

print(np.split(a, 3, axis=0))
"""[array([[1, 2, 3, 4]]), array([[5, 6, 7, 8]]), array([[ 9, 10, 11, 12]])]"""

# array_split()实现不等量的分割
print(np.array_split(a, 3, axis=1))
"""
[array([[ 1,  2],
       [ 5,  6],
       [ 9, 10]]), array([[ 3],
       [ 7],
       [11]]), array([[ 4],
       [ 8],
       [12]])]
"""

# hsplit函数(col方向分割)
print(np.hsplit(a, 2))

# vsplit函数 (row方向分割)
print(np.vsplit(a, 3))

未经允许不得转载:作者:1152-张同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《Numpy-Day1》 发布于2020-08-23

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录