按行、列连接numpy数组

本文介绍了如何使用numpy的np.r_函数按行连接数组,以及np.c_函数按列连接数组,通过实例演示了这两种方法的不同用法。同时,展示了如何连接数组、切片和标量。

我最先知道的是np.c[]可以按列连接2个数组,后来我要按行连接数组,于是我就传入axis=0,发现不行,查过文档后得知原来有专门的np.r_[]
np.r_p[]连接的内容可以是数组,也可以是切片或者是标量

np.r_[np.array([1,2,3]), 0, 0, np.array([4,5,6])]
#array([1, 2, 3, ..., 4, 5, 6])
np.r_[0:18:6, [0]*3, 5, 6]
#array([ 0,  6, 12,  0,  0,  0,  5,  6])

np.c_[np.array([1,2,3]), np.array([4,5,6])]
#array([[1, 4],
#       [2, 5],
#       [3, 6]])
np.c_[np.array([[1,2,3]]), 0, 0, np.array([[4,5,6]])]
#array([[1, 2, 3, ..., 4, 5, 6]])
在 Python 中,NumPy 本身并不直接支持像数据库那样的左连接(Left Join)操作。左连接通常是在处理结构化数据时使用的一种操作,例如在 Pandas 或 SQL 中。然而,如果需要通过 NumPy 实现类似的功能,则需要手动实现。 ### NumPy 数组的左连接模拟 要模拟 NumPy 数组的左连接操作,可以利用 `np.searchsorted` 或 `np.in1d` 等函数来匹配两个数组中的键值,并基于这些键值合并数据。 #### 示例:模拟左连接 假设有两个二维数组: - `array_left` 表示左表,包含一个键和一些附加数据。 - `array_right` 表示右表,同样包含键和一些附加数据。 目标是根据键对这两个数组连接操作。 ```python import numpy as np # 左数组 (左表) array_left = np.array([[1, 'A'], [2, 'B'], [3, 'C']], dtype=object) # 右数组 (右表) array_right = np.array([[2, 'X'], [3, 'Y'], [4, 'Z']], dtype=object) # 提取键用于匹配 keys_left = array_left[:, 0] keys_right = array_right[:, 0] # 创建映射关系 index_map = {key: idx for idx, key in enumerate(keys_right)} result = [] for row in array_left: key = row[0] if key in index_map: # 匹配到右表的数据 matched_row = array_right[index_map[key]] combined_row = np.concatenate((row, matched_row[1:]), axis=None) else: # 未匹配到右表的数据,填充空值 combined_row = np.concatenate((row, [None] * (array_right.shape[1] - 1)), axis=None) result.append(combined_row) # 转换为 NumPy 数组 left_joined_result = np.array(result, dtype=object) print("左连接结果:") print(left_joined_result) ``` 输出结果类似于: ``` 左连接结果: [[1 'A' None] [2 'B' 'X'] [3 'C' 'Y']] ``` 在这个例子中: - 首先提取了两个数组的键用于匹配。 - 利用字典 `index_map` 建立了键与索引之间的映射关系。 - 遍历左数组的每一,检查是否在右数组中存在对应的键。 - 如果存在对应键,则将两数据合并;否则,填充 `None` 来表示缺失的右表数据[^2]。 #### 注意事项 - 上述方法适用于小规模数据集,若数据量较大,建议使用 Pandas 的 `merge` 方法来实现更高效的左连接操作。 - 在使用 NumPy 模拟左连接时,需确保键的数据类型一致且可比较。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值