gpt4 book ai didi

python - 是否可以将范围作为变量 "var = k:k+number"

转载 作者:太空宇宙 更新时间:2023-11-04 05:00:17 24 4
gpt4 key购买 nike

我的循环方程式很长。在将其代入方程行之前,我想明确定义一个范围。

这是我的循环。 k 表示我想在等式中使用的范围

    k = 0
char_num = np.array([196, 191, 122])

for p in xrange(3):
# k = "k:(char_num[p]+ k)" # here is the range I which to use

## below is the equation which is quite cluttering.
H[k,:] = (H[k,:]/(2)) * \
(( np.sqrt((sum(W[:,k]))**2 + \
(4*sum((V[:,:].T*W[:,k]).T/np.dot(W[:,:],H[:,:]))) )))


# k += char_num[p]

是否可以将 k 定义为伪代码所示的范围?

最佳答案

我们可以在 char_num 上使用 cumsum 生成这些开始、停止索引,然后在循环中使用它们来切片 H,就像这样 -

s = np.r_[0,char_num.cumsum()]
for i,j in zip(s[:-1], s[1:]):
H[i:j,:] = ...

sample 运行-

In [18]: char_num = np.array([196, 191, 122])

In [19]: s = np.r_[0,char_num.cumsum()]
...: for i,j in zip(s[:-1], s[1:]):
...: print(i,j) # print start, stop indices
...:
(0, 196)
(196, 387)
(387, 509)

如果您确实需要将范围作为数组用于除切片之外的某些处理,我们可以使用 range(i,j)np.arange(i,j) 在循环中。我们也可以使用该范围进行切片,但这会强制复制并且会减慢速度。

或者,我们可以在那里使用切片符号,就像这样 -

slice0 = slice(i,j)
H[slice0] = ... # equivalent to H[i:j], i.e. H[i:j,:]

关于python - 是否可以将范围作为变量 "var = k:k+number",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45903786/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com