lambda function on a numpy array. What's wrong with this piece of code?
此代码有什么问题:
将numpy导入为np
1 2 3 4 5 6 | 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) |
预期:
1 2 | [[0. 1. 0.] [ 1. 1. 0.]] |
值错误:具有多个元素的数组的真值不明确。使用a.any()或a.all()。
嗯,lambda本身不会通过整个数组。为此,你需要一个高阶函数。在这种情况下:地图。
1 2 3 4 5 | 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的对象,但您可以这样转换它。
您可以使用lambda,但是
Python:
1
2
3a = np.array([1, 2, 3, 4, 5])
((a > 1) & (a < 3)).astype(int)
# array([0, 1, 0, 0, 0])倍频程/ MATLAB
1
2
3
4
5a = [1,2,3,4,5];
a>1 & a<3
% ans =
%
% 0 1 0 0 0
这对我很有用:
1 | A = A.clip(min=0, max=1) |