Numpy处理遇到的一些问题

这篇博客详细记录了使用Numpy过程中遇到的问题及其解决方法,包括查找非0元素、维度调整、数据重复、数组铺开、reshape机制、删除元素、np.where函数的使用、切片操作、更改维度、逐行操作以及生成移动窗口数据等实战技巧。
摘要由CSDN通过智能技术生成

前言

这里主要记录numpy遇到的一些问题,目录有点凌乱,日后再做整理


Next:寻找非0元素

问题描述
寻找numpy中非的0元素

问题解决
方法有三种,如下

# 1,返回的是两个adarray,代表了位置索引
a = np.array()
row, col = [i for i in np.nonzero(a)]
nonzero = []
for i, j in zip(row, col):
	nonzero.append(a[i, j])  # 位置索引


# 2,直接返回非0的值
a[a!=0]

# 3
where = np.where(a==0)
row, col = [i for i in where]
之后和1一样

Next:扩张与压缩维度

问题描述
想压缩数据的维度,有维度是多余的,如何将他们去掉

问题解决
运用numpy的np.squeeze函数

a = np.random.random((1,4))
print(a)

b = np.squeeze(a, axis=0)
print(b)
print(b.shape)

# out
[[0.87072838 0.55459801 0.20885144 0.72031326]]
[0.87072838 0.55459801 0.20885144 0.72031326]
(4,)

需要注意的是:

  1. np.squeeze只能够压缩本来是1维的数据,如果压缩不是1维度的维度则会产生报错
  2. np, squeeze相反的操作是np.expand_dims,能够扩张维度。这在pytorch中,相同功能的操作是torch.unsqueeze

Next:数据的重复repeat

问题描述
当我们说重复数据的时候,一般会有两种方式

  1. 以数据本身一个整体为单位,重复n次,这种操作实际上就是拼接操作
  2. 复制数据的某一行,或者是某一列,使其重复n次
    上述两种操作的实现方法是不同的,第一种操作可以调用numpy的repeat方法,第二种操作可以写循环用np.concatenate进行实现
a = np.array([[1,3,4],[4,5,6]])
a

# out
[[1 3 4]
 [4 5 6]]

第一种操作的实现,以整体为单位,重复复制n次

# 复制某一行
n = 5
for index in range(n):
    concat = np.concatenate([concat, a], axis=0) if index!= 0 else a
print(concat)

# out, a has been concat n times 
[[1, 3, 4],
 [4, 5, 6],
 [1, 3, 4],
 [4, 5, 6],
 [1, 3, 4],
 [4, 5, 6],
 [1, 3, 4],
 [4, 5, 6],
 [1, 3, 4],
 [4, 5, 6]]

第二种操作的实现,以某一行或者某一列为单位进行复制,调用repeat函数,调用有两种方式

  • 通过函数方式调用,np.repeat()
  • 通过NumPy.ndarray对象调用对象方法实现object.repreat()
a = np.array([[1,3,4],[4,5,6]])
np.repeat(a, 2, axis=0)

# 输出
array([[1, 3, 4],
       [1, 3
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值