【Python】比较新奇的用法

1、元组作为字典的键值

import numpy as np

a = {}
a[tuple([1024,1024,3])] = np.zeros((2,4))

print(a[(1024,1024,3)])
结果为:
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.]])

我想应该是元组具有唯一性,所以可以被使用。

2、对数组中满足条件元素进行改值操作

import numpy as np
matrix = np.array([[0, 2, 4],
                   [4, 5, 0],
                   [0, 4, 0]])
matrix[matrix>2] = 100

matrix的结果为:
array([[  0,   2, 100],
       [100, 100,   0],
       [  0, 100,   0]])

3、匿名函数和*号操作

import numpy as np
a = lambda x,y:np.array(x)+np.array(y)
b = [[1, 2, 3], [4, 5, 6]]
print(a(*b))

结果为:
array([5, 7, 9])

4、字典先声明,后动态添加内容的用法

img = {'object': list()}
obj = {}
img['object'] += [obj]
obj['min'] = 0
obj['max'] = 1
print(img) 
结果为:
{'object': [{'min': 0, 'max': 1}]}

5、从numpy数组中选取满足条件的值

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

结果为:
array([3, 3, 4, 5, 3])

6、删除list种的指定位置元素 

a = [[1,2,3],[4,5,6],]
del a[0]
print(a)
结果为
[[4, 5, 6]]

python要删除一个列表中的某个元素,知道这个元素是什么但不知道它的索引,就可以用list.romove 

这里写图片描述

7、一个列表存了很多个子列表,将重复的子列表删除,保留唯一的行数据

使用列表的属性可以如下:

import numpy as np

data = np.random.randint(3, size=(10000,12))
data = data.tolist()
data_c = []
for i in range(data.__len__()):
    if data[i] not in data_c:
        data_c.append(data[i])

但是当数据量特别大时,以上方法就不合适了,这时需要使用np.unique()

import numpy as np
import time

data = np.random.randint(3, size=(10000,12))

start_time = time.time()
data_c_1 = np.unique(data, axis=0) ################################
tmp_time = time.time()
print(tmp_time-start_time)

data = data.tolist()
start_time = time.time()
data_c = []
for i in range(data.__len__()):
    if data[i] not in data_c:
        data_c.append(data[i])
tmp_time = time.time()
print(tmp_time-start_time)

np.unique的时间为:0.017952442169189453

list的时间为:2.0116233825683594

8、一个数组是否被包含于另一个数组

import numpy as np
y1 = np.array([[1, 2], [1, 3], [1, 2], [2, 2]])
y2 = np.array([[100, 200], [100,300], [100, 200], [200, 200]])
z = np.array([1, 2])
print((y1 == z).all(1).any())
print((y2 == z).all(1).any())

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值