通过NumPy数组迭代并做出决定

时间:2018-01-11 16:52:30

标签: python arrays numpy

我一直在尝试迭代NumPy数组。我正在尝试检查数组的每个元素是否大于或等于0.1。如果元素大于或等于0.1,则代码应附加一个列表。

数组元素应该具有在另一个函数中处理的数字。例如:

[[-0.68454815]
 [-0.6868374 ]
 [-0.72553124]
 [-0.72324855]
 [-0.69258814]
 [ 0.30578739]
 [ 0.2679637 ]
 [ 0.27038732]
 [-0.62690676]
 [ 0.372456  ]
 [ 0.32854353]
 [ 0.33191556]
 [-0.6357395 ]
 [ 0.3649385 ]
 [ 0.31940787]
 [ 0.32325424]
 [-0.71096214]
 [ 0.29032854]
 [ 0.2589025 ]
 [ 0.26576582]
 [-0.71774566]
 [ 0.28527439]
 [ 0.25350313]
 [ 0.26095643]
 [-0.65131719]
 [ 0.35093124]
 [ 0.30984058]]

我正在使用它来创建一个带有counter_list输出的图形来创建一个收敛。

我已经检查了几个关于如何做的线程,我想出了类似的东西:

  def looper(self):
        rows = error.shape[0]

        for x in range(0, rows):

                counter_list = list();
                if error(rows) >= 0.2:
                    counter += 1
                    counter_list.append(counter)
                    print("Amount:",counter_list)

但是,我收到了这个错误:

TypeError: 'numpy.ndarray' object is not callable

我知道错误TypeError: 'numpy.ndarray' object is not callable意味着您尝试将numpy数组作为函数调用,但我仍然不知道如何修复它。

2 个答案:

答案 0 :(得分:2)

如果此列表是一维的,您可以尝试使用numpys切片。

return data[data >= 0.1]

返回保留np.array中每item >= 0.1data np array的{​​{1}}。

答案 1 :(得分:1)

更容易检查这种情况:

import numpy as np

def check(a):
    if np.all(a >= 0.1):
        print("All of them do!")
        return True
    else:
        print("Someone doesnt :'(")
        return False

a = np.array([1, 2, 3, 4, 5, 0.02])
b = np.array([1, 2, 3, 4, 5, 6])

check(a)
check(b)

输出:

Someone doesnt :'(
All of them do!

修改

要知道数字,有一种类似的简便方法:

print(np.count_nonzero(a < 0.1))  # prints 1
print(np.count_nonzero(a < 0.1))  # prints 0

然后你可以做类似的事情:

e = np.arange(1, np.count_nonzero(a < 0.1) + 1)  # e is [1]

这适用于多维数组。即:

a = np.array([[1, 2, 0.04, 4, 5, 3],[1, 2, 3, 4, 5, 0.02]])
check(a)
print(np.count_nonzero(a < 0.1))
e = np.arange(1, np.count_nonzero(a < 0.1) + 1)
print(e)

输出:

 Someone doesnt :'(
 2
 [1 2]

编辑2

为了表示增加的错误(错误含义值小于0.1),我能想到的最优雅的方法是使用累积总和:

import matplotlib.pyplot as plt

a = np.array([1, 2, 0.03, 4, 5, 0.06, 7, 8]) 
err = np.cumsum(a < 0.1)

plt.plot(np.arange(1, err.shape[0] + 1), err)
plt.savefig('image.png')
plt.show()

Increasing number of errors

如果这是你想要的,请告诉我!