我需要对两个不同长度的数组运行 for 循环。一个数组是 8760 x 1,另一个数组是 10 x 1。如果短数组中的值等于长数组中的值的索引,我不想更改任何内容。如果长数组中的值的索引不等于短数组中的值,我想将其设置为零。我知道我的代码是错误的,但这是一个开始。我无法附加更长的数组,但现在它可能是随机值。
I = np.array([4993, 4994, 4995, 5016, 5017, 5018, 5019, 5042, 5043, 5066])
import numpy as np
A = np.loadtxt('A.txt')
I = np.loadtxt('I.txt')
for i in A:
for j in I:
if A[j] != I[j]:
i = 0
最佳答案
主要原理
当您需要for
时要遍历数组的索引,请使用“计数”循环——迭代一组整数的循环。使用for index in range(len(
您的 list )
.
您的具体问题
鉴于您的 I
,我认为您要求设置 A
的所有值至0
(例如分配 A[5] = 0
),例如 A[4993]
除外将保持不变,对于 I
中的索引依此类推.
good_elements_indices = I
all_elements = A
for all_elements_index in range(len(all_elements)):
if all_elements_index not in good_elements_index:
A[all_elements_index] = 0
其他评论
- Python 风格使用小写变量名称,单词之间使用下划线,并且不使用缩写。因此我重命名为
I
和A
。请参阅PEP 8: Python Style Guide in
运算符是 Python 的核心。因为您已经导入numpy
和你的good_elements_index
又名I
已经是numpy.array
对象,它更快,但使用起来不太通用numpy.isin
按照mrcl
建议的功能.- 您的问题涉及“通过 2 个数组运行 for 循环”。这表明没有一个
for
循环但两个for
循环,嵌套,如您的问题代码所示。in
运算符实际上像for
一样进行迭代循环遍历列表测试集合中是否存在。
关于python - 通过两个不同长度的数组和索引操作运行 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44875888/