所以我有一个矩阵,我想只在某个列上应用条件更改。
示例:
array([[ 0.15293227, -1.50167614, -1.04974543],
[ 1.25396778, 0.21520081, 0.39136217],
[-1.1272423 , 1.18971277, 0.19569736]])
现在如何设置最后一列中大于0到1的所有元素?
答案 0 :(得分:3)
目前的答案看起来过于复杂。通过组合布尔和'正常'可以更容易地完成它。索引。
In [1]: import numpy as np
In [2]: a = np.array([[ 0.15293227, -1.50167614, -1.04974543],
...: [ 1.25396778, 0.21520081, 0.39136217],
...: [-1.1272423 , 1.18971277, 0.19569736]])
包含最后一列条件的布尔数组:
In [3]: mask = a[:, -1] > 0.
...: mask
Out[3]: array([False, True, True], dtype=bool)
现在,使用布尔数组和切片的组合来分配所需的值:
In [4]: a[mask, -1] = 1
...: a
...:
Out[4]:
array([[ 0.15293227, -1.50167614, -1.04974543],
[ 1.25396778, 0.21520081, 1. ],
[-1.1272423 , 1.18971277, 1. ]])
有关使用numpy建立索引的更多内容可以找到here。
答案 1 :(得分:2)
这是一种方法
In [2]: a[:, -1] = a[:, -1] > 0
In [3]: a
Out[3]:
array([[ 0.15293227, -1.50167614, 0. ],
[ 1.25396778, 0.21520081, 1. ],
[-1.1272423 , 1.18971277, 1. ]])
如果你不想将负面条目设置为零,这是一个很滑稽的选择:
In [4]: a[:, -1] = a[:, -1] ** (a[:, -1] < 0)
In [5]: a
Out[5]:
array([[ 0.15293227, -1.50167614, -1.04974543],
[ 1.25396778, 0.21520081, 1. ],
[-1.1272423 , 1.18971277, 1. ]])
在回复您的评论时,假设您要设置一个自定义浮动值,以便仅插入正数条目(同时单独留下负数条目)。
In [6]: float_to_insert_at_positives = 3.14159
In [7]: (float_to_insert_at_positives - a[:, -1]) * (a[:, -1] > 0) + a[:, -1]
Out[7]: array([-1.04974543, 3.14159 , 3.14159 ])
In [8]: a[:, -1] = (float_to_insert_at_positives - a[:, -1]) * (a[:, -1] > 0) +
... a[:, -1]
In [9]: a
Out[9]:
array([[ 0.15293227, -1.50167614, -1.04974543],
[ 1.25396778, 0.21520081, 3.14159 ],
[-1.1272423 , 1.18971277, 3.14159 ]])
答案 2 :(得分:1)
你在找这样的东西吗?
import numpy as np
list_1=np.array([[ 0.15293227, -1.50167614, -1.04974543],
[ 1.25396778, 0.21520081, 0.39136217],
[-1.1272423 , 1.18971277, 0.19569736]])
for i in list_1:
if i[-1:][0]>0:
i[i.tolist().index(i[-1:])]=1
print(list_1)
输出:
[[ 0.15293227 -1.50167614 -1.04974543]
[ 1.25396778 0.21520081 1. ]
[-1.1272423 1.18971277 1. ]]
只是为了一行中的乐趣,你可以这样做:
[i.__setitem__(i.tolist().index(i[-1:]),1) for i in list_1 if i[-1:][0]>0]
输出:
[[ 0.15293227 -1.50167614 -1.04974543]
[ 1.25396778 0.21520081 1. ]
[-1.1272423 1.18971277 1. ]]