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]]