numpy Python中的矢量for循环[重复]

hrirmatl  于 2023-02-19  发布在  Python
关注(0)|答案(1)|浏览(143)
    • 此问题在此处已有答案**:

NumPy selecting specific column index per row by using a list of indexes(7个答案)
2天前关闭。
我在Python中向量化下面的for循环时遇到了困难。

out = np.zeros((N, d))
dir_int = []

for i in range(N):
    dir_int.append(np.random.randint(low=0, high = d))
    out[i,dir_int[i]] = 1

#where:
# direct_int has shape (N, )
# u has shape (N, d)
# x has the same shape as u
# A has shape (2d, d) = [I,-I]^T, I the dxd identity
# b has shape (2d, )

bmAx = b - np.concatenate((x,-x), axis=1) #This is b-Ax has shape N x 2d
upper = np.copy(x) 
lower = np.copy(x) 

temp = np.zeros(2)
for i in range(len(dir_int)):
    temp[0] = bmAx[i, dir_int[i]]
    temp[1] = -bmAx[i, d + dir_int[i]]
            
    upper[i, dir_int[i]] += np.amax(temp)
    lower[i, dir_int[i]] += np.amin(temp)

对于第一个循环,dir_int可以被创建为dir_int = np.random.randint(low=0, high = d, size = N),然后对于out的每一个"行",它的一个列应该是1;此列是dir_int[row]。不确定如何在一行中执行此操作。
第二个循环比第一个更难。任何帮助都非常感激。

x6492ojm

x6492ojm1#

第一个循环的结果是

out = np.zeros((N, d))
dir_int = np.random.randint(0, d, N)
out[np.arange(N), dir_int] = 1

第二个有点难,因为bx是未定义的,我不确定我是否可视化了所需的输出,但是您应该能够使用dir_int索引到bMax,以便一次更新整个N长度的列。

相关问题