【问题标题】:Can I use a str in np.mean()?我可以在 np.mean() 中使用 str 吗?
【发布时间】:2020-01-03 13:20:55
【问题描述】:
stdev = 3   
value_1 = array   
value_2 = array   
value_3 = array

for h in range(1,4):  
    name = ('value' + str(h))  
    globals()['new_name_'+ str(h)] = np.mean(name) * stdev  

它应该是这样的:

new_name_1 = #result1   
new_name_2 = #result2   
new_name_3 = #result3 

但是,np.mean() 不适用于 str
我尝试使用 unicode 和其他东西。
我必须使用globals() 获得results(new name)。有人知道怎么做吗?

【问题讨论】:

  • 这是一个非常糟糕的方法。你不应该弄乱globals() 来制作可变数量的变量。您需要一个数组字典。 “我必须通过使用 globals() 来获得结果(新名称)”您几乎可以肯定 不需要 需要这样做。除此之外,字符串的含义是什么? np.mean(name) 只是将变量名的字符串传递给mean(),而不是存储在它上面的数组。此外,name = ('value' + str(h)) 无法生成实际的变量名称,因为它缺少下划线,但这是一个附带问题
  • 其余代码无法引用由为其命名的变量这一事实是它不是最佳实践的主要原因之一。将其放入现有的容器(例如字典)中将允许它被您选择的关联 id 引用,例如唯一的字符串或数字。

标签: python string numpy for-loop global-scope


【解决方案1】:

您可以使用列表来保存您的数组:

stdev = 3   
my_list = [array_1, array_2, array_3]
new_vars = []

for arr in my_list:  
    new_vars.append(np.mean(arr) * stdev)

此外,您可以使用 dict 保留变量:

stdev = 3   
my_dict = {
    'value_1': array_1, 
    'value_2': array_2,
    'value_3': array_3}

new_vars = {}

for var_name, arr in my_dict.items():  
    new_vars[f'new_{var_name}'] = np.mean(arr) * stdev

【讨论】:

  • 你应该使用字典而不是列表,这样他们仍然可以按名称引用对象(这是他们想要做的)
  • 如果你看名字,唯一的区别就是它们的索引,所以使用列表会更简单,但是是的,OP 也可以使用字典
猜你喜欢
  • 2019-09-11
  • 2014-12-08
  • 2013-02-01
  • 2011-12-12
  • 2014-12-01
  • 2016-11-07
  • 2015-07-10
  • 2012-07-09
  • 2013-10-21
相关资源
最近更新 更多