1、判断数组是否被破坏
1、描述
在下面的代码中,采用两种方式更改新数组中的数据,然后查看原来的数组中的数据是否被破坏。
2、代码
import numpy as np
# 切片数据是原数组的一个视图,与原数组共享内容空间,可以直接修改元素值
a = np.arange(10)
# [0 1 2 3 4 5 6 7 8 9]
print(a)
print("---------------")
# 方式1:使用对应坐标的方法更改数据
i = np.arange(0, 10, 2)
b = a[i]
# b的元素更改,a中元素不受影响。可以理解为b为重新生成的数组。
print("type(b)", type(b))
b[2] = 10
# [ 0 2 10 6 8]
print(b)
# [0 1 2 3 4 5 6 7 8 9]
print(a)
print("---------------")
# 方式1:使用切片的方法更改数据
b2 = a[2:5]
# b2的元素更改,a中元素会受影响
b2[0] = 200
# [200 3 4]
print(b2)
# 通过切片获得的数据的数组b再重新赋值后,更改了原来数组a的值。
# 在实践中,应该注意原始数据是否被破坏
# [ 0 1 200 3 4 5 6 7 8 9]
print(a)
2、元素去重
1、描述
下面的代码是对一维数组和二维数组去重的讨论。
2、代码
# @Time : 2020/12/8 16:41
# @Description :数组去重
import numpy as np
print("--------一维数组的去重操作---------")
# 直接使用库函数
a = np.array((1, 2, 3, 4, 5, 5, 7, 3, 2, 2, 8, 8))
# [1 2 3 4 5 5 7 3 2 2 8 8]
print('原始数组:', a)
# # 使用库函数unique
b = np.unique(a)
# [1 2 3 4 5 7 8]
print('去重后:', b)
print("--------二维数组的去重操作---------")
c = np.array(((1, 2), (3, 4), (5, 6), (1, 3), (3, 4), (7, 6)))
# [[1 2]
# [3 4]
# [5 6]
# [1 3]
# [3 4]
# [7 6]]
print(u'二维数组:\n', c)
# 使用unique对二维数组去重,并不是原来的效果。
# [1 2 3 4 5 6 7]
print('去重后:', np.unique(c))
print("-----------------")
# 方案1:转换为虚数
# x = r + i * 1j
x = c[:, 0] + c[:, 1] * 1j
# [1.+2.j 3.+4.j 5.+6.j 1.+3.j 3.+4.j 7.+6.j]
print('转换成虚数:', x)
# [1.+2.j 1.+3.j 3.+4.j 5.+6.j 7.+6.j]
print('虚数去重后:', np.unique(x))
# (array([1.+2.j, 1.+3.j, 3.+4.j, 5.+6.j, 7.+6.j]), array([0, 3, 1, 2, 5], dtype=int64))
# return_index的含义是未重复数据的索引
print(np.unique(x, return_index=True))
idx = np.unique(x, return_index=True)[1]
# [0 3 1 2 5]
print("idx", idx)
# [[1 2]
# [1 3]
# [3 4]
# [5 6]
# [7 6]]
print('二维数组去重:\n', c[idx])
print("-----------------")
# 方案2推荐使用:利用set
print('去重方案2:\n', np.array(list(set([tuple(t) for t in c]))))