Python科学计算库Numpy之 数组操作
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.hsplit
是split()
函数的特例,其中轴为 1 表示水平分割,无论输入数组的维度是什么
numpy.vsplit:``numpy.vsplit
是split()
函数的特例,其中轴为 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 左移两位