我有一个用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
)和整数或布尔数组都是有效索引
答案 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)
您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])