当前位置: 首页 > news >正文

NumPy -数组属性与形状操作

数组属性与形状操作

目录

  • 数组属性
  • 形状操作
  • 维度操作
  • 转置操作
  • 实际应用示例

数组属性

基本属性

import numpy as nparr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])print(f"数组:\n{arr}")
print(f"形状 (shape): {arr.shape}")        # (3, 3)
print(f"维度 (ndim): {arr.ndim}")          # 2
print(f"大小 (size): {arr.size}")          # 9
print(f"数据类型 (dtype): {arr.dtype}")    # int64
print(f"元素大小 (itemsize): {arr.itemsize}")  # 8 字节
print(f"总内存 (nbytes): {arr.nbytes}")    # 72 字节
print(f"标志 (flags):\n{arr.flags}")

数据访问属性

import numpy as nparr = np.array([1, 2, 3, 4, 5])# 数据指针
print(f"数据指针: {arr.ctypes.data}")# 数据是否连续存储
print(f"是否连续: {arr.flags['C_CONTIGUOUS']}")# 是否只读
arr_readonly = arr.copy()
arr_readonly.flags.writeable = False
print(f"是否只读: {arr_readonly.flags['WRITEABLE']}")

形状操作

reshape 方法

import numpy as np# 创建一维数组
arr = np.arange(12)
print(f"原数组: {arr}")
print(f"形状: {arr.shape}")# 重塑为二维数组
arr_2d = arr.reshape(3, 4)
print(f"\n重塑为 (3, 4):\n{arr_2d}")# 重塑为三维数组
arr_3d = arr.reshape(2, 2, 3)
print(f"\n重塑为 (2, 2, 3):\n{arr_3d}")# 使用 -1 自动计算维度
arr_auto = arr.reshape(3, -1)
print(f"\n自动计算列数:\n{arr_auto}")# 一维化
arr_flat = arr_2d.reshape(-1)
print(f"\n一维化: {arr_flat}")

resize 方法

import numpy as nparr = np.array([[1, 2, 3], [4, 5, 6]])
print(f"原数组:\n{arr}")# resize 会修改原数组
arr.resize(3, 2)
print(f"\nresize 后:\n{arr}")# 如果新大小更大,用0填充
arr.resize(4, 3)
print(f"\n扩大后(用0填充):\n{arr}")

flatten 和 ravel 方法

import numpy as nparr = np.array([[1, 2, 3], [4, 5, 6]])
print(f"原数组:\n{arr}")# flatten:返回副本
arr_flat1 = arr.flatten()
arr_flat1[0] = 999
print(f"\nflatten (修改后):\n{arr_flat1}")
print(f"原数组未变:\n{arr}")# ravel:返回视图(如果可能)
arr_flat2 = arr.ravel()
arr_flat2[0] = 888
print(f"\nravel (修改后):\n{arr_flat2}")
print(f"原数组已变:\n{arr}")

维度操作

增加维度

import numpy as nparr = np.array([1, 2, 3, 4])
print(f"原数组: {arr}")
print(f"形状: {arr.shape}")# 使用 newaxis 增加维度
arr_row = arr[np.newaxis, :]
print(f"\n行向量:\n{arr_row}")
print(f"形状: {arr_row.shape}")arr_col = arr[:, np.newaxis]
print(f"\n列向量:\n{arr_col}")
print(f"形状: {arr_col.shape}")# 使用 expand_dims
arr_expanded = np.expand_dims(arr, axis=0)
print(f"\nexpand_dims (axis=0):\n{arr_expanded}")
print(f"形状: {arr_expanded.shape}")arr_expanded = np.expand_dims(arr, axis=1)
print(f"\nexpand_dims (axis=1):\n{arr_expanded}")
print(f"形状: {arr_expanded.shape}")

减少维度

import numpy as nparr = np.array([[[1, 2, 3]]])
print(f"原数组: {arr}")
print(f"形状: {arr.shape}")# squeeze:移除长度为1的维度
arr_squeezed = np.squeeze(arr)
print(f"\nsqueeze 后: {arr_squeezed}")
print(f"形状: {arr_squeezed.shape}")# 指定 axis
arr2 = np.array([[[1]], [[2]], [[3]]])
print(f"\n原数组形状: {arr2.shape}")
arr2_squeezed = np.squeeze(arr2, axis=2)
print(f"squeeze (axis=2) 后形状: {arr2_squeezed.shape}")

转置操作

transpose 方法

import numpy as nparr = np.array([[1, 2, 3], [4, 5, 6]])
print(f"原数组:\n{arr}")
print(f"形状: {arr.shape}")# 转置
arr_T = arr.T
print(f"\n转置:\n{arr_T}")
print(f"形状: {arr_T.shape}")# 使用 transpose 方法
arr_T2 = arr.transpose()
print(f"\n使用 transpose:\n{arr_T2}")# 多维数组转置
arr_3d = np.arange(24).reshape(2, 3, 4)
print(f"\n三维数组形状: {arr_3d.shape}")# 交换轴
arr_T3d = arr_3d.transpose(2, 0, 1)
print(f"转置后形状: {arr_T3d.shape}")

swapaxes 方法

import numpy as nparr = np.arange(24).reshape(2, 3, 4)
print(f"原数组形状: {arr.shape}")# 交换轴
arr_swapped = np.swapaxes(arr, 0, 2)
print(f"交换轴 0 和 2 后形状: {arr_swapped.shape}")arr_swapped = np.swapaxes(arr, 1, 2)
print(f"交换轴 1 和 2 后形状: {arr_swapped.shape}")

moveaxis 方法

import numpy as nparr = np.arange(24).reshape(2, 3, 4)
print(f"原数组形状: {arr.shape}")# 移动轴
arr_moved = np.moveaxis(arr, 0, -1)
print(f"移动轴 0 到最后: {arr_moved.shape}")arr_moved = np.moveaxis(arr, [0, 1], [1, 0])
print(f"交换轴 0 和 1: {arr_moved.shape}")

实际应用示例

示例 1:图像处理中的形状操作

import numpy as np# 模拟图像数据 (高度, 宽度, 通道)
image = np.random.randint(0, 255, size=(480, 640, 3), dtype=np.uint8)
print(f"原始图像形状: {image.shape}")# 转换为灰度图(简单平均)
gray = image.mean(axis=2).astype(np.uint8)
print(f"灰度图形状: {gray.shape}")# 调整大小(下采样)
small = gray[::2, ::2]
print(f"下采样后形状: {small.shape}")# 重塑为一维特征向量
features = small.flatten()
print(f"特征向量形状: {features.shape}")

示例 2:矩阵运算中的形状操作

import numpy as np# 创建数据矩阵
data = np.random.randn(100, 10)
print(f"数据矩阵形状: {data.shape}")# 添加偏置项(需要在每行前加1)
bias = np.ones((100, 1))
data_with_bias = np.concatenate([bias, data], axis=1)
print(f"添加偏置后形状: {data_with_bias.shape}")# 转置用于矩阵乘法
data_T = data_with_bias.T
print(f"转置后形状: {data_T.shape}")# 计算协方差矩阵(需要中心化)
data_centered = data - data.mean(axis=0)
cov_matrix = np.dot(data_centered.T, data_centered) / (data.shape[0] - 1)
print(f"协方差矩阵形状: {cov_matrix.shape}")

示例 3:批量数据处理

import numpy as np# 创建批次数据
batch_size = 32
features = np.random.randn(1000, 784)  # 1000个样本,每个784维特征
print(f"原始数据形状: {features.shape}")# 重塑为批次
num_batches = features.shape[0] // batch_size
features_batched = features[:num_batches * batch_size].reshape(num_batches, batch_size, 784)
print(f"批次数据形状: {features_batched.shape}")# 处理每个批次
for i, batch in enumerate(features_batched):print(f"批次 {i}: 形状 {batch.shape}")# 这里可以进行批量处理

总结

数组属性与形状操作要点:

  1. 属性:shape, ndim, size, dtype, itemsize, nbytes
  2. 形状操作:reshape, resize, flatten, ravel
  3. 维度操作:newaxis, expand_dims, squeeze
  4. 转置操作:T, transpose, swapaxes, moveaxis

http://www.dtcms.com/a/583288.html

相关文章:

  • 网站建设新媒体运营网站的后台
  • 自媒体可做外链网站彩票网站建设制作
  • 北京市建设工程发包承包交易中心网站煤炭网站建设企业
  • 数字人企业全链条技术解析
  • 做好网站维护管理海南人才网
  • 商贸办公网站入口福建高端建设网站
  • 大型网站建设公司制作网站一键生成网站的软件
  • 04. STM32单片机驱动和控制彩屏_显示JPG_刷新测试_指针仪表方法
  • 笔试强训:Week-4
  • 网站建设投票系统总结二级目录网站怎么做
  • 【C++】:C++聊天室后台服务器之Spdlog日志组件安装与使用
  • 青岛建设工程信息网站如何做网站步骤
  • shell(2)--变量、算数运算、测试表达式、常用的操作运算符、文件测试运算符、整数值比较
  • php怎样做网站管理后台设计网站软件开发
  • 有没有和小孩做的网站新闻发布会邀请哪些媒体
  • 浙江做铁塔的公司网站网站年费如何做会计分录
  • 开州网站建设网站项目有需要什么技术支持
  • Linux27 线程同步--条件变量
  • seo网站优化推广怎么做盐城网站建设有限公司
  • Numpy一维、二维、三维数组切片实例
  • 手机端网站建站云南网站建设招商
  • 开放获取 SuperMamba 小目标检测特征增强框架
  • 布吉网站建设哪家技术好怎样在手机上创建网站
  • seo是什么?seo网站关键词优化哪家好
  • MinimalWalls v1.9.8 | 提供高质量简约壁纸,支持一键下载、收藏和自动更换等功能,界面干净并支持深浅模式切换
  • 网站优化推广seo公司网站建设的有什么需求
  • 成都网站建设与网站制作网站建设的技术要求
  • 东营住房与城乡建设部网站网站优化 北京
  • asp网站免费模板专门做外链的网站
  • 网站开发技术课程设计说明书做卖挖掘机的网站