此代码有什么问题:
将numpy导入为np
A = np.array([[-0.5, 0.2, 0.0],
[4.2, 3.14, -2.7]])
asign = lambda t: 0 if t<0 else 1
asign(A)
print(A)
预期:
[[0. 1. 0.]
[ 1. 1. 0.]]
ValueError:具有多个元素的数组的真值不明确。使用a.any()或a.all()
答案 0 :(得分:2)
单独运行lambda不会遍历整个数组。为此,您将需要一个更高阶的函数。在这种情况下:地图。
A = np.array([[-0.5, 0.2, 0.0],
[4.2, 3.14, -2.7]])
asign = lambda t: 0 if t<0 else 1
A = list(map(asign, A))
Map将遍历每个元素,并将其传递给函数。 我将地图包装在一个列表中,因为它返回一个类型为filter的对象,但是您可以通过这种方式进行转换。
答案 1 :(得分:0)
这对我有用:
A = A.clip(min=0, max=1)
答案 2 :(得分:0)
您可以使用lambda,但是numpy
数据类型允许您执行许多“ matlab类型”操作(对于那些习惯于此操作的人):
python:
a = np.array([1, 2, 3, 4, 5])
((a > 1) & (a < 3)).astype(int)
# array([0, 1, 0, 0, 0])
倍频程/ matlab
a = [1,2,3,4,5];
a>1 & a<3
% ans =
%
% 0 1 0 0 0