Python数组赋值异常:二次操作时元素被封装为独立数组
数组元素提取异常:第二次执行时元素被存为独立数组
我有如下数组:
A=[[0,1,2,3],[4,5,6,7,8],[9,10,11]]
遍历外层数组的每个子数组,用以下代码提取两个值:
arr=[A[j][i-1],A[j][i]]
首次执行这段代码一切正常,但再次执行提取其他值时,得到的结果却是:
arr2=[array[A[j][i-1]],array[A[j][i]]]
即每个元素都被保存为独立的数组。奇怪的是这种情况仅发生在第二次执行时,我尝试将这段代码移至正常执行的代码之前,问题依旧,且代码只是复制后修改了变量名,逻辑上应该没有错误。
请问原因是什么?感谢!
示例代码:
import numpy as np FP3=[np.array([ 0. , 4.44 , 9.517, 19.054, 38.525, 71.371, 84.197, 83.273, 66.427, 62.726, 54.323, 42.741, 26.953, 15.468, 15.468]), np.array([ 0. , 46.576483, 78.993133, 91.855251, 97.226361, 95.55402 , 95.152298, 94.595104, 94.26279 , 89.147579, 89.171261, 83.769474, 69.903644, 46.475055])] # 假设DP3是结构与FP3一致的numpy数组列表 DP3 = [np.arange(len(arr)) for arr in FP3] Cp1 = np.zeros(len(FP3)) Cp2 = np.zeros(len(FP3)) for j in range(len(FP3)): i=0 while FP3[j][i] < 0.6*max(FP3[j]): i=i+1 XD=[DP3[j][i-1],DP3[j][i]] YF=[FP3[j][i-1],FP3[j][i]] max_value = max(FP3[j]) indices = np.where(FP3[j] == max_value)[0] i=indices while FP3[j][i] > 0.85*max(FP3[j]): i=i+1 XD=[DP3[j][i-1],DP3[j][i]] YF=[FP3[j][i-1],FP3[j][i]] Dc=np.interp(0.85*max(FP3[j]), YF, XD) Cp1[j] = Dc Cp2[j] = 0.85*max_value
问题原因
核心问题出在i=indices这一行:
np.where返回的是numpy数组类型的索引集合,不是单个整数。第一次循环中的i是普通整数,所以DP3[j][i-1]和DP3[j][i]取到的是单个数值;- 第二次给
i赋值为indices(numpy数组)后,DP3[j][i-1]和DP3[j][i]会触发numpy的数组索引机制,返回长度为1的numpy数组而非单个数值,最终导致XD和YF变成包含两个单元素数组的列表; - 此外,当
i是数组时,i=i+1会将数组整体加1,后续while循环的条件判断也会变成数组的布尔运算,进一步引发逻辑错误。
解决方案
确保i始终是整数类型,有两种方式:
- 从
np.where返回的索引数组中取第一个元素:indices = np.where(FP3[j] == max_value)[0] i = indices[0] # 取第一个最大值的索引,转为整数 - 用
np.argmax直接获取第一个最大值的索引(更简洁):i = np.argmax(FP3[j])
内容的提问来源于stack exchange,提问作者JoeAA
相关产品推荐
相关产品推荐

