我一直在尝试迭代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数组作为函数调用,但我仍然不知道如何修复它。
答案 0 :(得分:2)
如果此列表是一维的,您可以尝试使用numpys切片。
return data[data >= 0.1]
返回保留np.array
中每item >= 0.1
个data 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()
如果这是你想要的,请告诉我!