稀疏数组与二维数据的相互转化

 

import numpy as np

# 1.创建二维数组
a = np.zeros((6, 7),dtype=np.int32)
a[1, 2] = 1
a[2, 3] = 2
a[4, 5] = 25
print("原始的二维数据:\n", a)

# 2.二维数组转换成稀疏数组
# 2.1 统计非零个数
num = 0
for row in a:
    for data in row:
        if data != 0:
            num += 1
print("\n非零个数:", num)

# 2.2 创建稀疏列表
b = np.zeros((num + 1, 3), dtype=np.int32)
# 更改第一行的数据
b[0, 0], b[0, 1] = a.shape
b[0, 2] = num

# 2.3 更改其他行的数据
notZero = 0
for row in range(b[0, 0]):
    for clo in range(b[0, 1]):
        if a[row, clo] != 0:
            notZero += 1
            b[notZero, 0], b[notZero, 1], b[notZero, 2] = row, clo, a[row, clo]
            
print("\n稀疏数组:\n", b)


# 3 将稀疏数组再转换成二位数组
c = np.zeros((b[0, 0], b[0, 1]), dtype=np.int32)
print(c.shape)
for i in range(1, len(b)):
    row = b[i]
    c[row[0], row[1]] = row[2]
print("\n还原的二维数据:\n", c)

结果如下:

原始的二维数据:
 [[ 0  0  0  0  0  0  0]
 [ 0  0  1  0  0  0  0]
 [ 0  0  0  2  0  0  0]
 [ 0  0  0  0  0  0  0]
 [ 0  0  0  0  0 25  0]
 [ 0  0  0  0  0  0  0]]

非零个数: 3

稀疏数组:
 [[ 6  7  3]
 [ 1  2  1]
 [ 2  3  2]
 [ 4  5 25]]
(6, 7)

还原的二维数据:
 [[ 0  0  0  0  0  0  0]
 [ 0  0  1  0  0  0  0]
 [ 0  0  0  2  0  0  0]
 [ 0  0  0  0  0  0  0]
 [ 0  0  0  0  0 25  0]
 [ 0  0  0  0  0  0  0]]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值