python自动复制_Python数组会自动复制每个oth

你需要一份复印件:b = a.copy()

b = a创建一个引用,因此a is b它们都指向内存中的相同位置,a.copy()实际上创建了一个新对象。在

^{pr2}$

如果使用basic slicing对数组进行切片,则id将不同,但任何更改都将反映在a和b中,因为使用基本索引时,基本切片生成的所有数组始终是原始数组的视图。Aview是一个数组,它不拥有自己的数据,而是引用另一个数组的数据。所以视图是一个新对象,但内容仍然属于原始数组。在

但是,使用advanced indexing高级索引总是返回数据的副本In [141]: a = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [142]: b = a[1:7:2] # basic indexing/view

In [143]: id(a)

Out[143]: 140335437385856

In [144]: id(b)

Out[144]: 140335437356528

In [145]: b[0] = 999

In [146]: a

Out[146]: array([ 0, 999, 2, 3, 4, 5, 6, 7, 8, 9])

In [148]: b

Out[148]: array([999, 3, 5])

In [149]: a = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [150]: b = a[[0,3,5]] # advanced indexing/copy

In [151]: b

Out[151]: array([0, 3, 5])

In [152]: b[0] = 999

In [153]: a

Out[153]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [154]: b

Out[154]: array([999, 3, 5])

In [157]: a = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [158]: b = a[a] # copy

In [159]: b

Out[159]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [160]: b[0] = 99

In [161]: a

Out[161]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [162]: b

Out[162]: array([99, 1, 2, 3, 4, 5, 6, 7, 8, 9])

这是特定的numpy行为,切片一个常规python平面列表将始终创建一个新列表,其中a中的更改不会反映在b中In [190]: a = [1,2,3,4,5]

In [191]: b = a[:3]

In [192]: b[0] = 999

In [193]: a

Out[193]: [1, 2, 3, 4, 5]

In [194]: b

Out[194]: [999, 2, 3]

如果python列表包含子列表,并且您创建了一个浅拷贝,那么您将捕获python列表:In [197]: a = [[1,2,3],[4,5]]

In [198]: b = a[:]

In [199]: id(a)

Out[199]: 140335437468296

In [200]: id(b)

Out[200]: 140335437417992

In [201]: b[0][0] = 999

In [202]: b

Out[202]: [[999, 2, 3], [4, 5]]

In [203]: a

Out[203]: [[999, 2, 3], [4, 5]]In [204]: a = [[1,2,3],[4,5]]

In [205]: from copy import deepcopy

In [206]: b = deepcopy(a)

In [207]: b[0][0] = 999

In [208]: b

Out[208]: [[999, 2, 3], [4, 5]]

In [209]: a

Out[209]: [[1, 2, 3], [4, 5]]

在NSL-KDD数据集中,包含了许多字符串类型的特征,例如“protocol_type”,“service”,“flag”等等。这些字符串特征需要被转换成数字标签,方便后续的机器学习算法使用。下面是一个将NSL-KDD中的字符串特征转换成数字标签的示例代码: ```python import pandas as pd # 读取NSL-KDD数据集 data = pd.read_csv('kddcup.csv', header=None) # 将字符串特征转换成数字标签 service_mapping = {'aol': 1, 'auth': 2, 'bgp': 3, 'courier': 4, 'csnet_ns': 5, 'ctf': 6, 'daytime': 7, 'discard': 8, 'domain': 9, 'domain_u': 10, 'echo': 11, 'eco_i': 12, 'ecr_i': 13, 'efs': 14, 'exec': 15, 'finger': 16, 'ftp': 17, 'ftp_data': 18, 'gopher': 19, 'harvest': 20, 'hostnames': 21, 'http': 22, 'http_2784': 23, 'http_443': 24, 'http_8001': 25, 'imap4': 26, 'IRC': 27, 'iso_tsap': 28, 'klogin': 29, 'kshell': 30, 'ldap': 31, 'link': 32, 'login': 33, 'mtp': 34, 'name': 35, 'netbios_dgm': 36, 'netbios_ns': 37, 'netbios_ssn': 38, 'netstat': 39, 'nnsp': 40, 'nntp': 41, 'ntp_u': 42, 'other': 43, 'pm_dump': 44, 'pop_2': 45, 'pop_3': 46, 'printer': 47, 'private': 48, 'red_i': 49, 'remote_job': 50, 'rje': 51, 'shell': 52, 'smtp': 53, 'sql_net': 54, 'ssh': 55, 'sunrpc': 56, 'supdup': 57, 'systat': 58, 'telnet': 59, 'tftp_u': 60, 'tim_i': 61, 'time': 62, 'urh_i': 63, 'urp_i': 64, 'uucp': 65, 'uucp_path': 66, 'vmnet': 67, 'whois': 68, 'X11': 69, 'Z39_50': 70} data[1] = data[1].map(service_mapping) protocol_mapping = {'tcp': 1, 'udp': 2, 'icmp': 3} data[2] = data[2].map(protocol_mapping) flag_mapping = {'OTH': 1, 'REJ': 2, 'RSTO': 3, 'RSTOS0': 4, 'RSTR': 5, 'S0': 6, 'S1': 7, 'S2': 8, 'S3': 9, 'SF': 10, 'SH': 11} data[3] = data[3].map(flag_mapping) # 输出转换后的数据 print(data.head()) ``` 在上面的代码中,我们使用了字典(mapping)的方式将字符串特征转换成数字标签。例如,将“service”特征中的“ftp”转换成数字标签17。最终输出的数据是一个经过转换的数据集,其中字符串特征已经被转换成了数字标签。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值