【Python】ndarray中的合并与分割

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全栈工程师特训班》课程

猜你喜欢

转载自blog.csdn.net/zhangwin3/article/details/89928597