Python代码修正请求:p[i]与c[i]的a、R数组计算结果不符
修正后的Numpy代码实现
核心逻辑说明
根据需求:
- 当
p[i] ≥ c[i]时,a[i] = 1;否则a[i] = 0 R的计算等价于取p[i]和c[i]中的较大值,与原式a[i]*p[i] + (1-a[i])*c[i]逻辑完全一致
完整修正代码
假设输入的p和c是4行3列的数组(对应4组,每组3个样本),以下是直接符合需求的numpy实现:
import numpy as np # 示例4组3样本的p、c数据(可替换为实际数据) p = np.array([[10, 20, 15], [5, 8, 3], [12, 9, 17], [7, 14, 6]]) c = np.array([[8, 25, 15], [6, 7, 4], [10, 11, 16], [9, 12, 5]]) # 计算a数组:p >= c时为1,否则为0 storage_a = np.where(p >= c, 1, 0) # 计算R数组:两种写法等价,任选其一即可 storage_R = storage_a * p + (1 - storage_a) * c # 更简洁的等价写法:storage_R = np.maximum(p, c) # 计算转置数组T(以storage_R的转置为例,可按需调整) T = storage_R.T # 打印结果验证 print("storage_a:\n", storage_a) print("\nstorage_R:\n", storage_R) print("\n转置数组T:\n", T)
关键修正点
- 用
np.where()直接生成符合条件的storage_a,避免低效的逐元素判断,同时保证数组维度匹配 storage_R的计算可通过np.maximum()简化,结果与原公式完全一致,且更高效- 转置操作使用numpy内置的
.T属性,确保数组维度转换准确(4行3列转3行4列)
内容的提问来源于stack exchange,提问作者Nicholas Nicholas
相关产品推荐
相关产品推荐

