我不确定如何表述条件循环。我想创建一个由等于 1 或 -1 的元素组成的 NxN 数组。我首先创建了一个 3x3 数组,打印时它由 0 到 1 之间的数字组成。
col = 3
row = 3
mymatrix = np.random.rand(col,row)
我想将它们的值设置为 1 或 -1,具体取决于分配给它们的值是否大于或等于 0.5。
for i in range(0,2):
for j in range(0,2):
if mymatrix[i,j] <= 0.5:
mymatrix[i,j] = -1.0
elif mymatrix[i,j] >= 0.5:
mymatrix[i,j] = 1.0
print mymatrix
出于某种原因,这将打印一个 3x3 矩阵,其中只有内部 4 个元素为 1 或 -1。
[[-1, 1,0.19343979]
[ 1, -1, 0.59891168]
[ 0.02766664, 0.73244162, 0.41541223]]
我知道 mymatrix[2,2] 是 0.41541223,所以我不明白为什么没有循环。
请您参考如下方法:
你的问题
您需要遍历所有行和列:
for i in range(row):
for j in range(col):
你只循环前两个:
col = 3
row = 3
在 Python 中,range(start, end) 给出一个范围起始形式,start 包含在内,end 包含在内。
for i in range(0,2):
for j in range(0,2):
顺便说一句,在 Python 中,行是第一个维度,所以这样会更好:
mymatrix = np.random.rand(row, col)
即使 row 和 col 在您的情况下具有相同的值。
更好的解决方案
使用 NumPy 数组时,应尽可能避免循环, 因为循环可能真的很慢。根据我的经验,NumPy 数组上的循环甚至比 Python 列表上的循环还要慢。 因此,最好这样做:
np.where(mymatrix <= 0.5, -1, 1)
这是一个速度更快的矢量化版本。 使用 NumPy 的目标之一通常是提高速度。
where(condition, [x, y])Return elements, either from
xory, depending oncondition.
