如何依据配对规则使用数组m修改数组a生成数组c?
如何用数组m修改数组a生成数组c?
背景说明
数组a是5行6列的二维数组,每行元素为0-5,且满足行内若p列值为q,则q列值为p;所有行内的列索引配对共有15个,均为p<q的不重复组合(即(0,1),(0,2),...,(4,5))。
数组m共4行15列:
- 前两行对应上述15个配对的列索引(第一行是配对的第一个列索引,第二行是第二个列索引)
- 后两行是对应配对需添加的数值(第三行对应第一个列的添加值,第四行对应第二个列的添加值)
核心修改逻辑
对每个配对(即m的每一列),给数组a中所有行的对应两列元素,分别加上m中对应位置的数值,最终得到数组c。
具体操作步骤
- 复制数组
a得到初始数组c,避免修改原数组:c = a.copy() - 遍历
m的每一列(共15列):- 提取当前配对的两个列索引:
col1 = m[0, i]、col2 = m[1, i](i为当前列的索引,从0到14) - 提取对应要添加的两个数值:
val1 = m[2, i]、val2 = m[3, i] - 给
c中所有行的col1列元素加上val1:c[:, col1] += val1 - 给
c中所有行的col2列元素加上val2:c[:, col2] += val2
- 提取当前配对的两个列索引:
代码实现
import numpy as np # 原数组a a = np.array([[1, 0, 3, 2, 5, 4], [2, 4, 0, 5, 1, 3], [3, 5, 4, 0, 2, 1], [4, 3, 5, 1, 0, 2], [5, 2, 1, 4, 3, 0]]) # 数组m m = np.array([[0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 3, 3, 4], [1, 2, 3, 4, 5, 2, 3, 4, 5, 3, 4, 5, 4, 5, 5], [6, 4,-2, 5, 0,-1, 1, 4,-7,-8,-7, 3,-4, 1, 0], [3,-8, 1, 2, 1, 3, 1, 6, 5, 5, 0, 2, 3, 1, 0]]) # 初始化c为a的副本 c = a.copy() # 遍历m的每一列完成数值添加 for i in range(m.shape[1]): col1, col2 = m[0, i], m[1, i] val1, val2 = m[2, i], m[3, i] c[:, col1] += val1 c[:, col2] += val2 # 输出结果 print("生成的数组c:") print(c)
运行上述代码后,输出的c与题目给出的结果完全一致。
内容的提问来源于stack exchange,提问作者user109387
相关产品推荐
相关产品推荐

