无法分配numpy数组

时间:2019-04-26 06:42:43

标签: python numpy

我想在numpy数组中平方偶数索引值,并在该数组中分配相同的值。我遵循了两种方法。

1-

for i in range(len(arr)):
        if i %2 == 0:
            arr[i] = arr[i]**2

那可以。

2-

arr[i] = arr[i]**2 for i in range(len(arr)) if i % 2 == 0

 File "<ipython-input-149-30fc7ed25f1f>", line 1
    arr[i] = arr[i]**2 for i in range(len(arr)) if i % 2 == 0
                     ^
SyntaxError: invalid syntax

不起作用。

语法有误吗?

3 个答案:

答案 0 :(得分:2)

这适用于列表压缩:

arr = [arr[i]**2 if i % 2 == 0 else arr[i] for i in range(len(arr))]

但是您也可以使用较短的名称:

arr[::2] = arr[::2]**2

答案 1 :(得分:0)

我假设您正在尝试list comprehension,因为它的语法略有不同,请继续阅读列表理解的语法。
它的语法类似于[exp1(item) if condition1 else exp2(item) for item in arr]
正确的方法如下。

arr = [1,2,3,4,5,6]
arr = [arr[i]**2 if i % 2 == 0 else arr[i] for i in range(len(arr))]
print(arr)
#[1, 2, 9, 4, 25, 6]

此操作正在运行for循环,检查条件,然后选择arr[i]或{{1} },然后将结果分配给列表

答案 2 :(得分:0)

不要在numpy数组上循环,您将失去numpy的所有功能。

使用以下numpy函数来获得所需的结果:

import numpy as np
arr = np.random.randint(0,10, size=(10,))
print(arr)
ans = np.where(np.arange(10) % 2 == 0, arr, arr**2)
print(ans)

输出:

[ 1 9   1  1  0 6   5  2  1 5 ]
[ 1 81  1  1  0 36  5  4  1 25]

np.where选择条件为真的元素。然后输出原始数组或平方数组。

np.where的文档。