NumPy - 数组操作

操作ndarray 的方法

numpy.reshape:这个函数在不改变数据的条件下修改形状

numpy.ndarray.flat:该函数返回数组上的一维迭代器,行为类似 Python 内建的迭代器

numpy.ndarray.flatten:该函数返回折叠为一维的数组副本

numpy.ravel:这个函数返回展开的一维数组,并且按需生成副本。返回的数组和输入数组拥有相同数据类型

numpy.transpose:这个函数翻转给定数组的维度。如果可能的话它会返回一个视图

numpy.ndarray.T:该函数属于ndarray类,行为类似于numpy.transpose

numpy.rollaxis:该函数向后滚动特定的轴,直到一个特定位置

numpy.swapaxes:该函数交换数组的两个轴。对于 1.10 之前的 NumPy 版本,会返回交换后数组的试图

numpy.broadcast_to:此函数将数组广播到新形状。 它在原始数组上返回只读视图。 它通常不连续。 如果新形状不符合 广播规则,该函数可能会抛出ValueError

numpy.expand_dims:函数通过在指定位置插入新的轴来扩展数组形状

numpy.squeeze:函数从给定数组的形状中删除一维条目

numpy.concatenate:数组的连接是指连接。 此函数用于沿指定轴连接相同形状的两个或多个数组

numpy.stack:此函数沿新轴连接数组序列。 此功能添加自 NumPy 版本 1.10.0

numpy.stack:函数的变体,通过堆叠来生成水平的单个数组

numpy.vstack:``numpy.stack函数的变体,通过堆叠来生成竖直的单个数组

numpy.split:该函数沿特定的轴将数组分割为子数组

numpy.hsplit:``numpy.hsplitsplit()函数的特例,其中轴为 1 表示水平分割,无论输入数组的维度是什么

numpy.vsplit:``numpy.vsplitsplit()函数的特例,其中轴为 0 表示竖直分割,无论输入数组的维度是什么

numpy.resize:此函数返回指定大小的新数组。 如果新大小大于原始大小,则包含原始数组中的元素的重复副本

numpy.append:此函数在输入数组的末尾添加值。 附加操作不是原地的,而是分配新的数组。 此外,输入数组的维度必须匹配否则将生成ValueError

numpy.insert:此函数在给定索引之前,沿给定轴在输入数组中插入值。 如果值的类型转换为要插入,则它与输入数组不同。 插入没有原地的,函数会返回一个新数组。 此外,如果未提供轴,则输入数组会被展开

numpy.delete:此函数返回从输入数组中删除指定子数组的新数组。 与insert()函数的情况一样,如果未提供轴参数,则输入数组将展开

numpy.unique:此函数返回输入数组中的去重元素数组。 该函数能够返回一个元组,包含去重数组和相关索引的数组。 索引的性质取决于函数调用中返回参数的类型

numpy.bitwise_and:通过np.bitwise_and()函数对输入数组中的整数的二进制表示的相应位执行位与运算

numpy.bitwise_or:通过np.bitwise_or()函数对输入数组中的整数的二进制表示的相应位执行位或运算

numpy.invert此函数计算输入数组中整数的位非结果。 对于有符号整数,返回补码

left_shift:``numpy.left shift()函数将数组元素的二进制表示中的位向左移动到指定位置,右侧附加相等数量的 0

right_shift:``numpy.right_shift()函数将数组元素的二进制表示中的位向右移动到指定位置,左侧附加相等数量的 0

代码举例

import numpy as np

a1 = np.arange(2, 10)
a2 = a1.reshape(4, 2) # 修改形状
print(a2)
print(a2.flat[5]) # 返回展开数组中的下标的对应元素 (一维迭代器)
print(a2.flatten(order=‘F’)) # 以 F 风格顺序展开的数组 返回一维的数组副本
print(a2.ravel(order=‘F’)) # 以 F 风格顺序展开的数组 并且按需生成副本
print(np.transpose(a2)) # numpy.ndarray.T 功能相同
print(“------------------------------------”)
a3 = np.arange(8).reshape(2, 2, 2)
print(a3)
print(np.rollaxis(a3, 2)) # 将轴 2 滚动到轴 0(宽度到深度)
print(np.rollaxis(a3, 2, 1)) # 将轴 0 滚动到轴 1:(宽度到高度)
print(np.swapaxes(a3, 2, 0)) # 现在交换轴 0(深度方向)到轴 2(宽度方向)
x = np.array([[1], [2], [3]])
y = np.array([4, 5, 6])
b = np.broadcast(x, y) # 对 y 广播 x.它拥有 iterator 属性,基于自身组件的迭代器元组
r, c = b.iters
print(b.shape)
c = np.empty(b.shape)
c.flat = [u + v for (u, v) in b]
print©
print(x + y) # 获得了和 NumPy 内建的广播支持相同的结果
print(np.broadcast_to(b, (4, 4))) # 此函数将数组广播到新形状
x = np.array(([1, 2], [3, 4]))
y = np.expand_dims(x, axis=1)
print(x.shape, y.shape) # 函数通过在指定位置插入新的轴来扩展数组形状
x = np.arange(9).reshape(1, 3, 3)
y = np.squeeze(x)
print(y.shape)
x = np.array([[1, 2], [3, 4]])
y = np.array([[5, 6], [7, 8]])
print(np.concatenate((x, y))) # 此函数用于沿指定轴连接相同形状的两个或多个数组
print(np.concatenate((x, y), axis=1))
print(np.stack((x, y), 0)) # 沿轴 0 堆叠两个数组
print(np.stack((x, y), 1)) # 沿轴 1 堆叠两个数组
print(np.hstack((x, y))) # 水平堆叠两个数组
print(np.vstack((x, y))) # 竖直堆叠两个数组
a = np.arange(9)
print(np.split(a, 3)) # np.split(a,[4,7])
print(np.split(a, [4, 7])) # 将数组在一维数组中表明的位置分割
a = np.arange(16).reshape(4, 4)
print(np.hsplit(a, 2)) # split()函数的特例,其中轴为 1 表示水平分割,无论输入数组的维度是什么
print(np.vsplit(a, 2)) # split()函数的特例,其中轴为 0 表示竖直分割,无论输入数组的维度是什么
a = np.array([[1, 2, 3], [4, 5, 6]])
print(np.resize(a, (3, 2)))
print(np.resize(a, (3, 4))) # 尺寸变大了 出现重复元素
print(np.append(a, [7, 8, 9])) # 向数组添加元素
print(np.append(a, [[7, 8, 9]], axis=0)) # 沿轴 0 添加元素
print(np.append(a, [[5, 5, 5], [7, 8, 9]], axis=1)) # 沿轴 1 添加元素
a = np.array([[1, 2], [3, 4], [5, 6]])
print(np.insert(a, 3, [11, 12])) # '未传递 Axis 参数。 在插入之前输入数组会被展开
print(np.insert(a, 1, [11], axis=0)) # 沿轴 0 广播
print(np.insert(a, 1, [11], axis=1)) # 沿轴 1 广播
a = np.arange(12).reshape(3, 4)
print(np.delete(a, 5)) # 未传递 Axis 参数。 在插入之前输入数组会被展开
print(np.delete(a, 1, axis=1)) # 删除第二列
a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(np.delete(a, np.s_[::2])) # 包含从数组中删除的替代值的切片
a = np.array([5, 2, 6, 2, 7, 5, 6, 8, 2, 9])
print(np.unique(a))
print(np.unique(a, return_index=True)) # 去重数组的索引数组
print(np.unique(a, return_inverse=True)) # 使用下标重构原数组
print(np.unique(a, return_counts=True)) # 去重元素的重复数量
print(np.bitwise_and(13, 17)) # 位与
print(np.bitwise_or(13, 17)) # 位或
print(np.invert(np.array([13], dtype=np.uint8))) # 13 的位反转,其中 ndarray 的 dtype 是 uint8
print(np.left_shift(10, 2)) # 将 10 左移两位
print(np.right_shift(40, 2)) # 将 40 左移两位

代码 Github地址:https://github.com/shadowagnoy/python_learn/

参考文档:https://docs.scipy.org/doc/numpy/reference/routines.html

参考文档:https://www.tutorialspoint.com/numpy/index.htm