考虑下面的代码。它创建了一个具有i
列和2**i
行的2d数组。在本例中,形状为(10,1024)。行显示从[0,0,0,0,0,0,0,0,0,0]
到[1,1,1,1,1,1,1,1,1,1]
的连续二进制数,按升序列出(从左到右)。然后我使用切片来检查小范围的连续数组行(例如:out[990:995]
)。一切都按预期工作。
import numpy as np
i = 10
r = np.arange(2**i)
out = (((r[:,None] & (1 << np.arange(i)))) > 0).astype(int)
out = out[:,::-1] # for ascending left to right
字符串
问题是:i
的实际值可能更大(比如i=30
,产生超过10亿行),所以我不想一直创建一个巨大的数组,只检查它的一小部分。
问题:假设i=30
,我需要找到out[1006200:1006211]
。有没有一种方法可以有效地做到这一点而无需计算整个数组?
对于它的价值,所需的输出将是一个数组的形状(11,30):
[[0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0 1 1 0 1 0 0 1 1 1 1 0 0 0]
[0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0 1 1 0 1 0 0 1 1 1 1 0 0 1]
[0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0 1 1 0 1 0 0 1 1 1 1 0 1 0]
...
[0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0 1 1 0 1 0 1 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0 1 1 0 1 0 1 0 0 0 0 0 0 1]
[0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0 1 1 0 1 0 1 0 0 0 0 0 1 0]]
型
1条答案
按热度按时间vqlkdk9b1#
根据
low/high
边界计算动态范围:个字符