You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python数组连接疑问:区分求和与连接操作及相关问题

问题解答

1. xs的形状是什么?

首先要明确:np.split(x,5)返回的不是一个numpy数组,而是一个Python列表,里面包含了5个一维numpy数组。所以你不能直接用xs.shape来获取它的"形状"——因为列表本身没有shape属性。

我们可以拆解来看:

  • 列表里的每个子元素都是np.ndarray类型,它们的形状都是(2,)(一维数组,长度为2)
  • 整个xs是一个长度为5的Python列表,元素就是上述的5个一维数组

你可以用代码验证这一点:

import numpy as np
x = np.arange(10)
x[4]=44
xs=np.split(x,5)

# 查看xs的类型
print(type(xs))  # 输出 <class 'list'>
# 查看每个子数组的形状
for arr in xs:
    print(arr.shape)  # 每个子数组都会输出 (2,)

2. 为什么xs[:i]+xs[i+1:]没有执行求和操作?

这里的核心是区分Python列表的+运算符和numpy数组的+运算符:

  • xs是Python列表,xs[:i]是取列表的前i个元素(这里i=2,结果是[array([0,1]), array([2,3])]),xs[i+1:]是取列表从i+1位置开始的剩余元素(结果是[array([6,7]), array([8,9])])
  • Python列表的+运算符作用是拼接两个列表,而不是对列表中的元素做加法。所以xs[:i]+xs[i+1:]的结果是一个新的列表:[array([0,1]), array([2,3]), array([6,7]), array([8,9])]
  • 最后np.concatenate会把这个新列表里的所有一维数组连接成一个大的一维数组,也就是你看到的array([0, 1, 2, 3, 6, 7, 8, 9])

如果想要实现数组元素的求和,你需要先把xs转换成二维numpy数组,再使用numpy的元素级加法逻辑。举个例子:

# 把xs转换成二维numpy数组
xs_arr = np.array(xs)
# 此时xs_arr的形状是(5,2)
i=2
# 筛选掉第i行后,对剩余行做对应位置的求和
sum_arr = np.sum(xs_arr[np.arange(len(xs_arr)) != i], axis=0)
print(sum_arr)  # 输出 array([16, 20]),对应0+2+6+8和1+3+7+9的结果

简单总结:

  • 操作对象是Python列表时,+是列表拼接
  • 操作对象是numpy数组时,+是元素级的对应位置相加

内容的提问来源于stack exchange,提问作者user3452134

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:57:54