【问题标题】:Adding values to a new array将值添加到新数组
【发布时间】:2019-02-19 00:32:56
【问题描述】:

我有一个用零实例化的现有 python 数组。如何迭代和更改值?

我无法遍历和更改 Python 数组的元素?

num_list = [1,2,3,3,4,5,]
mu = np.mean(num_list)
sigma = np.std(num_list)
std_array = np.zeros(len(num_list))

for i in std_array:
        temp_num = ((i-mu)/sigma)
        std_array[i]=temp_num

这是错误: 只有整数、切片 (:)、省略号 (...)、numpy.newaxis (None) 和整数或布尔数组是有效的索引

【问题讨论】:

  • 您能打印这份声明吗?我想看看它会返回什么。 np.zeros(len(num_list))
  • @FranJ [0. 0. 0. 0. 0. 0.]

标签: python arrays numpy


【解决方案1】:

在您的代码中,您正在迭代numpy.array std_array 的元素,然后使用这些元素作为索引来取消引用std_array。一个简单的解决方案如下。

num_arr = np.array(num_list)
for i,element in enumerate(num_arr):
    temp_num = (element-mu)/sigma
    std_array[i]=temp_num

我假设您想在计算 temp_num 时在循环的第一行中使用 num_list 的值。请注意,我创建了一个名为 num_arr 的新 numpy.array。这是因为我们可以使用利用broadcasting 的替代解决方案,而不是循环:

std_array = (num_arr-mu)/sigma

这相当于循环,但执行起来更快更简单。

【讨论】:

    【解决方案2】:

    i 是来自std_array 的元素,即float。因此,Numpy 抱怨您正在尝试使用 float 进行切片,其中:

    仅整数、切片 (:)、省略号 (...)、numpy.newaxis (None) 并且整数或布尔数组是有效的索引

    如果您不必使用for,那么numpy 可以为您广播计算:

    (std_array - mu)/sigma
    # array([-2.32379001, -2.32379001, -2.32379001, -2.32379001, -2.32379001,
       -2.32379001])
    

    【讨论】:

      猜你喜欢
      • 2014-10-17
      • 2018-01-09
      • 1970-01-01
      • 1970-01-01
      • 2012-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-05
      相关资源
      最近更新 更多