python - 从特定索引开始更改数组
问题描述
我的列表看起来像这样:
A_List= [0,1,2,3,4,5,6,7,8]
B_List=[0,10,20,30,40,50,60,70,80]
C_List=[0,100,200,300,400,500,600,700,800]
D_List = ...
等等。
每个值都是 np.float64 类型。
这里的值是随机的,我只是想表明它们都是相同的长度。
我现在尝试编写一个循环,以这种方式从特定索引开始更改这些列表,包括索引 4 和索引 4 以上的所有数字都减去索引 4 中写入的值。
i=4
while i <= len(A_List):
A_List[i] = A_List[i]+A_List[4]
B_List[i] = B_List[i]+B_List[4]
C_List[i] = C_List[i]+C_List[4]
D_List[i] = D_List[i]+D_List[4]
...
i=i+1
这是行不通的。错误:只能将 str(不是“numpy.float64”)连接到 str)。我不太明白,因为我认为我正在用另一个浮点值替换一个浮点值。我在这里先向您的帮助表示感谢。
解决方案
为什么不简单地使用 numpy 而不是列表?
首先创建一个二维数组:
A_List= [0,1,2,3,4,5,6,7,8]
B_List=[0,10,20,30,40,50,60,70,80]
C_List=[0,100,200,300,400,500,600,700,800]
a = np.c_[A_List, B_List, C_List]
array([[ 0, 0, 0],
[ 1, 10, 100],
[ 2, 20, 200],
[ 3, 30, 300],
[ 4, 40, 400],
[ 5, 50, 500],
[ 6, 60, 600],
[ 7, 70, 700],
[ 8, 80, 800]])
然后执行减法:
>>> a-a[4]
array([[ -4, -40, -400],
[ -3, -30, -300],
[ -2, -20, -200],
[ -1, -10, -100],
[ 0, 0, 0],
[ 1, 10, 100],
[ 2, 20, 200],
[ 3, 30, 300],
[ 4, 40, 400]])
如果您只想对 ≥ 4 行应用变换:
mask = np.tile((np.arange(len(a))>=4), (a.shape[1], 1)).T
np.where(mask, a-a[4], a)
输出:
array([[ 0, 0, 0],
[ 1, 10, 100],
[ 2, 20, 200],
[ 3, 30, 300],
[ 0, 0, 0],
[ 1, 10, 100],
[ 2, 20, 200],
[ 3, 30, 300],
[ 4, 40, 400]])
推荐阅读
- r - 删除重复的日期并折叠 NA 值
- r - 如何在直方图中放置一条 v 线?
- kubernetes - 如何更改 Keycloak 中的主机更新密码电子邮件
- javascript - 使用 VUgen 循环遍历表行并进行比较
- android - 以内部应用测试员身份登录时,在 Google Play 应用上找不到 URL
- java - Spring Mongo 聚合项目过滤器
- regex - bbedit - 如何将多个字符串更改为标题大小写?
- javascript - 如何在迁移中更新约束
- javascript - Jest 有时找不到模块
- docker - 从另一个 docker 容器访问 docker 容器