我想在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
不起作用。
语法有误吗?
答案 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的文档。