Numpy 基础学习(一)

Numpy基础学习(一)

数组的操作
  • 属性:确定数组大小、形状、存储大小、数据类型
  • 索引:获取和设置数组各元素的值
  • 切分:在大的数组中获取或设置更小的子数组
  • 变形:改变数组的形状
  • 拼接与分裂:将多个数组合并为一个,及将一个数组分裂为多个
属性

每个数组都有nidm(维度)、shape(每个维度的大小)、size(总大小)

# 生成一个随机数组
import numpy as np
np.random.seed(0) # 设置随机种子数

x1 = np.random.randint(10,size=6) # 生成一维数组
x2 = np.random.randint(10,size=(3,4)) # 生成二维数组
x3 = np.random.randint(10,size=(3,4,5)) # 生成三维数组

print(x3.ndim)
print(x3.shape)
print(x3.size)

# 运行结果
3
(3,4,5)
60
    
# 每个数组元素字节大小的属性 itemsize
# 数组总字节大小的属性 nbytes

print(x3.itemsize)
print(x3.nbytes)

# 运行结果
8
480
索引:获取单个元素
import numpy as np
np.random.seed(0) # 设置随机种子数
x1 = np.random.randint(10,size=6)
>>> x1
array([5,0,3,3,7,9])
>>> x1[0]
5
>>> x1[-1]
9

>>> x2
array([[3,5,2,4],
       [7,6,8,8],
       [1,6,7,7]])
>>> x2[0,0]
3
>>> x2[2,0]
1
>>> x2[2,-1]
7

>>> x2[0,0]=12
>>> x2
array([[12,5,2,4],
       [7,6,8,8],
       [1,6,7,7]])
       
# Numpy 中数组是元素是固定类型
# 当将一个浮点数插入一个整形的数组中,浮点值会被截短
切片:获取子数组
# 一维子数组
>>> x.np.arange(10)
>>> x
array([0,1,2,3,4,5,6,7,8,9])
>>> x[5:] # 索引5之后的元素
array([5,6,7,8,9])
>>> x[4:7]
array([4,5,6])
>>> x[::2]
array([0,2,4,6,8])
>>> x[1::2] # 从索引1开始
array([1,3,5,7,9])
>>> x[5::-2] # 从索引5开始每隔一个元素逆序
array([5,3,1])

# 多维子数组
import numpy as np
np.random.seed(0) # 设置随机种子数

x2 = np.random.randint(10,size=(3,4)) # 生成二维数组
>>> x2
array([[12, 5, 2, 4],
       [ 7, 6, 8, 8],
       [ 1, 6, 7, 7]])

>>> x2[:2,:3] # 两行,三列
array([[12, 5, 2],
       [ 7, 6, 8]])
       
>>> x2[:3,::2] # 所有行,每隔一列
array([[12, 2],
       [ 7, 8],
       [ 1, 7]])
>>> x2[::-1,::-1] # 行列同时逆序
array([[ 7, 7, 6, 1],
       [ 8, 8, 6, 7],
       [ 4, 2, 5, 12]])

# 获取数组的行列
print(x2[:,0]) # x2第一列

# 运行结果
[12 7 1]

print(x2[0,:]) # x2第一行
# 等价于x2[0]

# 运行结果
[12 5 2 4]

# Numpy数组的切片返回的是数组数据的视图,而不是数组数据的副本
x2_sub = x2[:2,:2]
print(x2_sub)

# 运行结果
[[12  5]
 [ 7  6]]

x2_sub[0,0] = 99
print(x2_sub)

# 运行结果
[[99  5]
 [ 7  6]]

print(x2)

# 运行结果
[[99  5  2  4]
 [ 7  6  8  8]
 [ 1  6  7  7]]
# 修改子数组的同时,原始数组也会被修改

# Numpy创建数组副本,通过 copy() 方法实现
x2_sub_copy = x2[:2,:2].copy()
print(x2_sub_copy)

# 运行结果
[[99  5]
 [ 7  6]]

x2_sub_copy[0,0] = 42
print(x2_sub_copy)
print(x2)

# 运行结果
[[42  5]
 [ 7  6]]

[[99  5  2  4]
 [ 7  6  8  8]
 [ 1  6  7  7]]
数组的变形
# 通过reshape()函数实现
gird = np.arange(1,10).reshape(3,3)
print(gird)

# 运行结果
[[1 2 3]
 [4 5 6]
 [7 8 9]]

x = np.array([1, 2, 3])
print(x.reshape((1,3)))
print(x.reshape((3,1)))
print(x[np.newaxis,:]) # 用newaxis获取行向量
print(x[:,np.newaxis]) # 用newaxis获取列向量

# 运行结果
[[1 2 3]]

[[1]
 [2]
 [3]]

[[1 2 3]]

[[1]
 [2]
 [3]]
数组的拼接与分裂
  • 拼接

拼接或连接Numpy的两个数组主要用np.concatenate,np.vstack,
np.hstack

x = np.array([1,2,3])
y = np.array([4,5,6])
z = np.array([99,99,99])
print(np.concatenate([x,y]))
print(np.concatenate([x,y,z])) # 可拼接多个数组
# 运行结果
[[1 2 3 4 5 6]]
[[1 2 3 4 5 6 99 99 99]]

# 拼接二维数组
gird = np.array([[1,2,3],
                 [4,5,6]])
print(np.concatente([gird,gird])) # 沿第一个轴添加
print(np.concatente([gird,gird],axis=1))

# 运行结果
[[1 2 3]
 [4 5 6]
 [1 2 3]
 [4 5 6]]
 
[[1 2 3 1 2 3]
 [4 5 6 4 5 6]]
 
# 沿着固定维度处理数组,使用vstack(垂直栈)和hstack(水平栈)
x = np.array([1,2,3])
gird = np.array([[9,8,7],
                 [6,5,4]])
y = np.array([[99],
              [99]])
print(np.vstack([x,gird]))
print(np.hstack([gird,y]))

# 运行结果
[[1 2 3]
 [9 8 7]
 [6 5 4]]
 
[[9 8 7 99]
 [6 5 4 99]]
  • 分裂

分裂可以通过np.split、np.vsplit、np.hsplit实现

x = [1,2,3,99,99,3,2,1]
x1,x2,x3 = np.split(x,[3,5])
print(x1,x2,x3)

# 运行结果
[1 2 3] [99 99] [3 2 1]

gird = np.arange(16).reshape((4,4))
print(gird)

upper,lower = np.vsplit(gird,[2])
print(upper)
print(lower)

left,right = np.hsplit(gird,[2])
print(left)
print(right)

# 运行结果
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
 
[[ 0  1  2  3]
 [ 4  5  6  7]]
[[ 8  9 10 11]
 [12 13 14 15]]

[[ 0  1]
 [ 4  5]
 [ 8  9]
 [12 13]]
[[ 2  3]
 [ 6  7]
 [10 11]
 [14 15]] 
发布了5 篇原创文章 · 获赞 0 · 访问量 44
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览