为何for循环计算值无法添加到numpy数组,返回全None?
问题:循环计算值存入numpy数组后全为None
你的代码里,自定义函数P只通过print输出了计算结果,但没有返回值——Python中没有return语句的函数默认返回None。所以你调用P(u[i])时,append到列表p里的都是None,转成numpy数组自然就是全None的数组。
修复方案:给函数添加return语句
把P函数里的print(sum/14)改成return sum/14,这样调用函数时就能拿到实际计算值:
import numpy as np import matplotlib.pyplot as plt j=np.array([14,15,16,16,16,22,22,24,24,25,25,25,25,25]) u=np.unique(j) def P(age): sum=0 for i in range(14): if j[i]==age: sum=sum+1 return sum/14 # 替换print为return p = [] for i in range(len(u)): # 用len(u)代替固定的6,适配数组长度变化 p.append(P(u[i])) p=np.array(p) print(p) print(type(p))
输出:
[0.07142857 0.07142857 0.21428571 0.14285714 0.14285714 0.35714286] <class 'numpy.ndarray'>
更高效的numpy原生实现
既然用了numpy,完全可以不用手动写循环,利用numpy内置的统计函数更简洁高效:
import numpy as np j=np.array([14,15,16,16,16,22,22,24,24,25,25,25,25,25]) u, counts = np.unique(j, return_counts=True) p = counts / len(j) print(p)
输出和上面一致,而且代码更简洁,数据量大时性能优势更明显。
内容的提问来源于stack exchange,提问作者Ruben Martinez
相关产品推荐
相关产品推荐

