【发布时间】:2016-10-17 23:07:04
【问题描述】:
我想更有效地将 2 个相同大小的矩阵(a 和 b)的每个值返回到 matrixc包含条件的结果。
例子:
条件:For a == 0 and b == 3
a = [[1 0]
[0 1]]
b = [[3 5]
[3 9]]
会返回:
c = [[0 0]
[1 0]]
[0,1] 是 a == 0 和 b == 3 的唯一位置,因此它是 c 中 True 的唯一位置
这是我目前的代码:
import numpy as np
a = np.matrix("1, 0; 0 1")
print(a,'\n')
b = np.matrix("3, 5; 3 9")
print(b,'\n')
c = []
for x in range(0,np.shape(a)[1]):
row = []
for y in range(0,np.shape(a)[1]):
row.append(int(a[x,y] == 0 and b[x,y] == 3)) # the int() is there just to keep things tighty for the 3 prints
c.append(row)
c = np.matrix(c)
print(c)
结果:
[[1 0]
[0 1]]
[[3 5]
[3 9]]
[[0 0]
[1 0]]
我也可以使用:
a=a==0
b=b==3
c=a&b
但这需要复制 a 和 b 并且使用大矩阵仍然有效吗?
为什么我不能只使用a == 0 & b == 3?
我需要对几个 1000+ 大小的矩阵进行这样的比较,这样你就可以看到迭代认为它们会很慢的地方。
非常感谢您提供的任何帮助,我确信答案很简单,就在我面前,但我只是愚蠢。
【问题讨论】:
-
为什么
c = (a == 0) & (b == 3).astype(int)会复制? -
"为什么我不能只使用 a == 0 & b == 3 ?" - 只是优先级。您需要添加括号来消除歧义,例如
(a == 0) & (b == 3)。 -
@PadraicCunningham 和 user2357112 谢谢我只是不知道我需要括号
-
@Whud,不用担心,
a=a==0没有复制 a,它返回的是一个布尔数组,它与复制 a 的实际副本不同 -
@PadraicCunningham 我需要多个不同的条件来询问 a 和 b 所以如果我想以不同的方式查看矩阵,我需要制作一个副本。 (直到我了解了括号的事情)
标签: python python-3.x oop numpy matrix