欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【Python】ndarray中的合并与分割

程序员文章站 2022-05-27 22:41:30
...
import numpy as np

ndim   shape    size    reshape 

a = np.arange(10)
a    # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

a.ndim   # 1
a.shape    # (10,)
a.size    # 10

A = np.ones(shape=(3, 5))    # 3行5列的二维数组,值全为1
A
A.ndim    # 2
A.shape    # (3, 5)
A.size    # 15

a = np.array([[1, 2, 3],
              [4, 5]])
a    # array([list([1, 2, 3]), list([4, 5])], dtype=object)
a.ndim    # 1
a.shape    # (2,)
a.size    # 2

a = np.arange(10)
a    # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
X = a.reshape(2, 5)
X
X.ndim    # 2
X.shape    # (2, 5)

a.reshape(5, -1)    # 5行,列自己计算
a.reshape(-1, 2)    # 2列,行自己计算
# a.reshape(-1, 3)    # ValueError: cannot reshape array of size 10 into shape (3)

取值

X = np.arange(15).reshape(3, 5)
X    # 15个数,分成3行5列的数组

X[0]    # array([0, 1, 2, 3, 4])
X[-1]    # array([10, 11, 12, 13, 14])

X[0][4]    # 不推荐这种方式取值,有些情况不能得到想要的数据 4

X[(0, 4)]    # 推荐这种方式取值,建议简化如下:
X[0, 4]    # 推荐这种方式取值 4

一维数组切片

a = np.arange(10)
a[0:5]    # 切片 array([0, 1, 2, 3, 4])

a[:5]    # array([0, 1, 2, 3, 4])
a[5:]    # array([5, 6, 7, 8, 9])

a[0:8:2]    # 第1个参数开始;第2个参数结束(不包括);第3个参数步长 array([0, 2, 4, 6])
a[::2]    # array([0, 2, 4, 6, 8])

a[::-1]    # array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])

二维数组切片

X = np.arange(15).reshape(3, 5)    # 取值
X    # 15个数,分成3行5列的数组

X[0:2, 0:3]
X[:2, :3]
X[:2][:3]    # 先切出[0:2]  在前一次的结果上,再做[0:3]

X[::2, ::2]

X[:2, ::2]

X[::-1, ::-1]    # 行和列的数据都倒过来

引用关系

X = np.arange(15).reshape(3, 5)    # 取值
X    # 15个数,分成3行5列的数组

a =list(range(5))
a    # [0, 1, 2, 3, 4]
b = a[:2]
b    # [0, 1]
b[1] = 111
b    # [0, 111]
a    # [0, 1, 2, 3, 4]

X2 = X[:2, :2]
X2[0, 0] = 99
X2    # X2第1行第1列的数被改成99,X也随之改变

X3 = X[:2, :2].copy()
X3
X3[0, 0] = 100
X3    # X3第1行第1列的数被改成100,而X未变化

注:代码来自《Python全栈工程师特训班》课程

相关标签: python jupyter