在数组中查找特定值

3

我正在尝试将有条件的值插入到一个空数组中,插入位置必须精确。

empty_array = np.zeros([40,100])
for x in range (1,24):
    array[x,:,:] #which is also sized 40x100
    if the_values_in_the_array < 0.25:
         the_values_in_the_array = 0
    empty_array = empty_array + array [x,:,:]

我应该使用哪种语法来实现这个逻辑?我应该如何扫描数组中的值以找到符合条件的值?


@F L,你的“array”数组是几维的?你说它是40*100,为什么使用“array[x,:,:]”,看起来似乎是三维的? - MaThMaX
@MaThMaX 是的,x代表乘法。但尺寸是40*100。 - F L
将代码简化为一个可以独立于外部定义运行的简单示例会很有帮助。在这里,我们必须假设您所说的“array”和“the_values_in_the_array”的含义。 - Will Martin
2个回答

4
empty_array = np.zeros([40,100])
array = np.random.rand(24,40,100)

array[array<0.25]=0 # change all the values which is <0.25 to 0
for x in range(1,24):
    empty_array += array[x,:,:]

非常感谢。这比我想象的要简单得多。 - F L
@FL,很高兴能帮忙。有关numpy布尔数组索引的更多信息,请参阅文档。 - MaThMaX
那就是我的问题叫什么。谢谢。 - F L

1
我认为这是您正在尝试执行的操作。建议使用np.where例程将小于0.25的值设置为零。然后,您可以仅对数组的第一个维度求和,以获得所需的输出数组。为了示例,我减少了问题的维度。
import numpy as np

vals = np.random.random([24, 2, 3])
vals_filtered = np.where(vals < 0.25, 0.0, vals)
out = vals_filtered.sum(axis=0)
print("First sample array has the slice vals[0,:,:]:\n{}\n".format(vals[0, :, :]))
print("First sample array with vals>0.25 set to 0.0:\n{}\n".format(vals_filtered[0, :, :]))
print("Output array is the sum over the first dimension:\n{}\n".format(out))

这将返回以下输出。
First sample array has the slice vals[0, :, :]: 
[[ 0.16272567  0.13695067  0.5954866 ]
 [ 0.50367823  0.8519252   0.3000367 ]]

First sample array with vals>0.25 set to 0.0: 
[[ 0.          0.          0.5954866 ]
 [ 0.50367823  0.8519252   0.3000367 ]]

Output array is the sum over the first dimension: 
[[ 11.12707813  12.04175706  11.5812803 ]
 [ 13.73036272   9.3988165   12.41808745]]

这是您要寻找的计算吗?调用vals.sum(axis=0)是一种更快的方法来执行此操作。通常最好调用numpy的内置数组例程,而不是显式使用for循环。


1
感谢您,现在我知道了另一种针对像我这样简单问题的新语法(和新逻辑)。非常有用的信息。 - F L

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接