我不确定如何表达条件循环。我想创建一个NxN数组,该数组由等于1或-1的元素组成。我已经开始创建一个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,所以我无法理解为什么这不是循环的。
答案 0 :(得分:4)
您需要遍历所有行和列:
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):
BTW,在Python行中是第一个维度,所以这会更好:
mymatrix = np.random.rand(row, col)
尽管row
和col
在您的情况下具有相同的值。
使用NumPy数组时,应尽可能避免循环, 因为循环可能非常慢。根据我的经验,NumPy数组上的循环甚至比Python列表上的循环更慢。 因此,做得更好:
np.where(mymatrix <= 0.5, -1, 1)
这是一个更快的矢量化版本。 使用NumPy的目标之一通常是速度。
where(condition, [x, y])
从
x
或y
返回元素,具体取决于condition
。
答案 1 :(得分:1)
您的错误位于上限:
mymatrix = np.random.rand(col,row)
for i in range(0,3):
for j in range(0,3):
if mymatrix[i,j] <= 0.5:
mymatrix[i,j] = -1.0
elif mymatrix[i,j] >= 0.5:
mymatrix[i,j] = 1.0
print (mymatrix)