Nil*_*lli 4 python matrix scipy
我有一个scipy矩阵.如果它满足某个条件,我试图将它替换为1,如果不满足则尝试将其替换为0.
for a in range(0,l):
for b in range(0,l):
if Matrix[a][b] == value:
Matrix[a][b] = 1
else:
Matrix[a][b] = 0
Run Code Online (Sandbox Code Playgroud)
我的矩阵中充满了具有"价值"的元素.然而它给出了输出作为一个完全为0的矩阵.
这在以前的类似脚本上工作过.它可能与矩阵的结构有关吗?
这是矩阵首先看到的方式 -
[ [0 1. 1. 2.]
[1. 0. 2. 1.]
[1. 2. 0. 1.]
[2. 1. 1. 0.]]
Run Code Online (Sandbox Code Playgroud)
当我设置值== 1.我得到所有的1到1,所有的2到零.这就是我想要的.
但是,当我设置值== 2.我把所有东西都归零.
当我做所有建议的时候.
[[ 0. 1. 1. 2. 1. 2. 2. 3.]
[ 1. 0. 2. 1. 2. 1. 3. 2.]
[ 1. 2. 0. 1. 2. 3. 1. 2.]
[ 2. 1. 1. 0. 3. 2. 2. 1.]
[ 1. 2. 2. 3. 0. 1. 1. 2.]
[ 2. 1. 3. 2. 1. 0. 2. 1.]
[ 2. 3. 1. 2. 1. 2. 0. 1.]
[ 3. 2. 2. 1. 2. 1. 1. 0.]]
>> np.where(matrix==2,1,0)
>> array([[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0]])
Run Code Online (Sandbox Code Playgroud)
如果你实际上有一个矩阵,而不是一个ndarray,那么
Matrix[a]
Run Code Online (Sandbox Code Playgroud)
是1行矩阵和2D.同样的,
Matrix[a][b]
Run Code Online (Sandbox Code Playgroud)
也是一个矩阵(或一个IndexError,因为Matrix[a]
只有一行).你需要使用
Matrix[a, b]
Run Code Online (Sandbox Code Playgroud)
获得元素.这是使用矩阵可能很尴尬的原因之一.请注意,您可以使用
Matrix == value
Run Code Online (Sandbox Code Playgroud)
得到一个布尔矩阵,然后用astype
它将它转换成你想要的类型.这将是更少的代码,它运行得更快.因此,如果您的dtype是int32,那么您发布的整个loopy事件可以替换为
return (Matrix == value).astype(numpy.int32)
Run Code Online (Sandbox Code Playgroud)
或者如果你真的想要修改数组,你可以使用numpy.equal
带out
参数的ufunc :
numpy.equal(Matrix, value, out=Matrix)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9107 次 |
最近记录: |