python中矩阵切片维数微秒变化

博客主要介绍Python中矩阵切片相关内容。在深度学习中,矩阵切片维数变化易致程序崩溃。numpy和list中使用冒号切片不会降维,弄不清时numpy可用reshape()转换。还指出list和numpy访问元素方式不同,list无reshape()函数,查看维度方式也有差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 前言

使用切片访问矩阵的部分数据(特别是一行或一列数据)时,通常会出现切片维数怎么在瞎变化,以致于不得不用reshape()强制改变维数。在深度学习中,网络对矩阵维数的要求是非常严格的,往往就是这些看似不起眼的错误,导致整个程序崩溃。

2 numpy中切片

import numpy as np

a=np.array([[1,2,3],[4,5,6],[7,8,9]])
b=a[0,0]    
c=a[0:2,0]
d=a[0,0:2]
e=a[0:1,0:1]

print("a=",a)
print("b=",b)
print("c=",c)
print("d=",d)
print("e=",e)
运行结果
变量空间

 

 可以看出,使用了冒号“:”就不会降维。比如:b没有使用“:”,变成0维,即数值;c,d只使用一个“:",变成1维,即向量;而e有2个地方使用“:”,仍为矩阵。

如果确实弄不清或担心出错,可以用reshape()进行强制转换,其中-1表示维数待定(=总元素个数/其他维度元素个数),如下:

c=c.reshape(-1,1)
d=d.reshape(1,-1)
print("c=",c)
print("d=",d)
运行结果
变量空间

3 list中切片 

a=[[1,2,3],[4,5,6],[7,8,9]]
b=a[0][0]    
c=a[0:2][0]
d=a[0][0:2]
e=a[0:1][0:1]
 
print("a=",a)
print("b=",b)
print("c=",c)
print("d=",d)
print("e=",e)
运行结果
变量空间

 和numpy中一样,使用了“:”就不会降维。

4 注意事项

  • list和numpy访问数据元素有所不同,list是一层一层的从外往里访问,每访问一层加一个“[ ]”,和C语言中的2维数组访问方式差不多,而numpy只用一个“[ ]”,层之间用“,”隔开。

  • list中没有reshape()函数,不能改变列表维度,除非使用先转换为numpy数组,调用reshape()函数,再转换为list,如下:

f=np.array(e).reshape(-1,1).tolist()
print("f=",f)  # f= [[1], [2], [3]]

 

变量空间

 

  •  如果不看变量空间,numpy数组可以通过a.shape属性和np.shape(a)函数查看数组维度,list只能通过len()函数查看列表第一维的维度,如下:

import numpy as np

a=np.array([[1,2,3],[4,5,6]])
b=[[1,2,3],[4,5,6]]

print("a.shape=",a.shape)
print("np.shape(a)=",np.shape(a))
print("len(a)=",len(a))

print("len(b)=",len(b))
print("len(b[0])=",len(b[0]))
运行结果
### 处理 Python 中时间的微秒部分 在 Python 的 `time` 模块中,虽然它主要用于处理与时间戳和延迟相关的操作,但它并不直接支持微秒级别的精度表示。然而,在更高级别的模块如 `datetime` 或者第三方库(例如 Pandas 和 NumPy),可以实现对微秒的支持。 #### 使用 `datetime` 模块 Python 自带的标准库 `datetime` 提供了一个类 `datetime.datetime` 来处理日期和时间据,其中包含了微秒的部分。可以通过创建一个 `datetime` 对象并访问其 `.microsecond` 属性来获取微秒值[^1]: ```python from datetime import datetime now = datetime.now() print(f"Current microsecond: {now.microsecond}") ``` 上述代码展示了如何利用 `datetime` 获取当前时间的微秒。 #### 结合 Pandas 和 NumPy 进一步扩展 当涉及到大据集或者科学计算时,Pandas 和 NumPy 是非常强大的工具。它们提供了更加灵活的方式去管理和分析含有时序的据结构。对于微秒级别的时间解析,Pandas 支持高分辨率的时间序列对象,并允许精确到纳秒级的操作: ```python import pandas as pd timestamp_with_microseconds = pd.Timestamp('2023-04-01 12:00:00.123456') print(timestamp_with_microseconds) print(f"Microseconds part: {timestamp_with_microseconds.microsecond}") ``` 这段脚本演示了怎样借助 Pandas 创建具有特定微秒成分的时间戳以及提取该组件的方法。 #### 微秒的应用场景实例 假设有一个日志系统需要记录事件发生的确切时刻直到微秒层面,则可采用如下方法构建这样的消息格式[^2]: ```python class LogTestMessage: def __init__(self, timestamp, seq): self.timestamp = int(timestamp * 1e6) # Convert to microseconds from seconds. self.seq = seq log_entry = LogTestMessage(datetime.now().timestamp(), 1) print(log_entry.__dict__) ``` 此片段说明了将实际时间转换为自定义协议所需的整型微秒值的过程。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

little_fat_sheep

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值