将值添加到新数组

时间:2019-02-19 00:32:56

标签: python arrays numpy

我有一个用0实例化的现有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)和整数或布尔数组都是有效索引

2 个答案:

答案 0 :(得分:3)

在您的代码中,您正在遍历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

我假设您要在计算num_list时在循环的第一行中使用temp_num的值。请注意,尽管如此,我还是创建了一个名为numpy.array的新num_arr。这是因为我们可以使用broadcasting

std_array = (num_arr-mu)/sigma

这等效于循环,但是执行起来更快,更简单。

答案 1 :(得分:0)

istd_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])