机器学习常用数据类型以及格式的转换

数据类型的转换

  1. float64转float32
import numpy as np
a = np.array([1,2,3,4,5,6,7,8,9],dtype='float64')
c = a.astype(np.float32)

数据格式的转换

  1. list转化为array
    myarray = np.array(mylist)
    myarray = np.asarray(mylist)
    注意:要保证列表中每一行的列数都是一样的

深拷贝
深拷贝是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另外一个对象造成影响。

浅拷贝
拷贝出来的目标对象的指针和源对象的指针指向的内存空间是同一块空间,浅拷贝只是一种简单的拷贝,让几个对象公用一个内存,然而当内存销毁的时候,指向这个内存空间的所有指针需要重新定义,不然会造成野指针错误。

简单来说就是:浅拷贝得到的和原有的同根同源,而深拷贝则是另一个新个体!
深浅拷贝都会创建新的地址,区别是浅拷贝只拷贝一层,深拷贝才是真正意义的拷贝。

array是深拷贝,改变原始数据,不会改变拷贝后的数据
asarray是浅拷贝,改变原始数据或者拷贝后的数据,另一个都会随之改变

import numpy as np
list_1 = [1, 2, 3, 4]
np_data_1 = np.array(list_1, dtype=np.float32)

# np.array 会copy出一个副本,占用新的内存,属于深拷贝
np_data_2 = np.array(np_data_1, dtype=np.double)
print(np_data_2 is np_data_1)

# np.asarray  当 dtype 相同时,指针指向的内存相同,没有拷贝
np_data_3 = np.asarray(np_data_1, dtype=np.float32)
print(np_data_3 is np_data_1)

# np.asarray  当 dtype 不同时,使用深拷贝。
np_data_4 = np.asarray(np_data_1, dtype=np.double)
print(np_data_4 is np_data_1)

判断a中数是否大于0,如果大于0,则将该数置为1

a = [[1,2],[1,0]]
a = numpy.asarray(a) #必须先转换为array,否则出现array(1.0, dtype=float32)
numpy.asarray(a>0,'i') #'i'表示为dtype类型为int
# 输出:array([[1, 1],
#             [1, 0]])
numpy.asarray(a>0,'f')
# 输出:array([[ 1.,  1.],
#             [ 1.,  0.]], dtype=float32)
  1. array转化为list
    mylist = myarray.tolist()

  2. tensor转化为list
    mylist = mytensor.numpy().tolist()

  3. list转化为tensor
    mytensor = torch.Tensor(mylist)

  4. array转化为tensor
    mytensor = torch.from_numpy(myarray)

  5. tensor转化为array
    myarray = mytensor.numpy()
    myarray = mytenor.cpu().numpy() (GPU上的)

  6. list转成dataframe
    emb_df = pd.DataFrame(data=mylist)

Tensor常用操作

  1. 转置
    newtensor = torch.t(mytensor)

  2. 统计tensor中True出现的次数。

#mask 是一个这样的tensor:   tensor([[False, False, False,  ..., False, False, False]], device='cuda:0')
#shape:  torch.Size([1, 1024])
print((mask==False).sum())
#tensor(1024, device='cuda:0'),有需要可以转int
  1. 对预测结果进行按概率值进行降序排列,取概率最大的top个结果作为模型的预测结果
top = 35
pred_label_locate = torch.argsort(data, descending=True)[:, 0:top]
pred_label_locate[1]

参考资料:
Python 列表(List)操作方法详解
Python之数组(array)使用方法总结与Numpy中的数组用法
python中常用的九种预处理方法分享
从numpy中学习深度拷贝和浅拷贝
Python 中 numpy 中数据的array 与 asarray 的深拷贝与浅拷贝

posted @ 2022-08-17 09:58  YTT77  阅读(285)  评论(0编辑  收藏  举报