我有一个方形的2D numpy数组A
和一个B
具有相同形状的零数组。
对于每一个指标(i, j)
的A
,除第一和最后的行和列等,我想分配给B[i, j]
的值np.sum(A[i - 1:i + 2, j - 1:j + 2]
。
例:
A =
array([[0, 0, 0, 0, 0],
[0, 1, 0, 1, 0],
[0, 1, 1, 0, 0],
[0, 1, 0, 1, 0],
[0, 0, 0, 0, 0])
B =
array([[0, 0, 0, 0, 0],
[0, 3, 4, 2, 0],
[0, 4, 6, 3, 0],
[0, 3, 4, 2, 0],
[0, 0, 0, 0, …
Run Code Online (Sandbox Code Playgroud) 假设我在 python 2.7 中有一个非常非常大的 python 整数(尽管如果需要,我不介意切换到 python 3)。
比 2^100000 更大的东西。
找到二进制序列中全 1 的位置的最快方法是什么?(例如:24 就是 11000 ---> = [4,5] (或 [5,4].. 我不关心顺序)
目前我正在使用:
sum = whatever_starting_number
while 1:
val = sum.bit_length()-1
sum -= 2**val
mylist.append(val)
if sum == 0:
break
Run Code Online (Sandbox Code Playgroud)
这没关系,但它比仅仅取 log2 并重复减去它还快。我实际上想做的只是查看位,跳过零,记录1的位置,甚至不需要修改原始值。
编辑:得到多个答案,真的很感激。我将在几个 timeit 测试中实现它们,并将在明天更新结果。
我将值集存储为python长整数,形式为不同的2**i和,因为python允许对它的整数进行逐位运算.对于我的许多程序来说,这比使用数据结构要快得多.
我经常发现自己想要取两个按位值的差异.
例:
假设我有两个值,由2和4表示.通过并联它们形成一个集合,值为6.(110)然后我有第二个集合,十进制值10(二进制1010),即2和8.
我想找到第一组中的值,而不是第二组中的值.如果我使用集结构,我会采取设置差异.但我使用的是整数.如果我尝试做差异,它将无法工作(它将是-4).
截至目前,我发现自己正在做value1 - (value1&value2).这需要两个单独的操作来找到差异.有没有办法可以利用python提供的功能在一次操作中快速完成,而不是两次?
我正在尝试使用libgdx List小部件来列出arraylist中的所有项目.好吧,实际上我的arraylist是一个对象列表,每个对象都包含一个字符串,即对象"name".
但是,当我尝试用List显示它们时,它会水平列出,而不是垂直列出.如果我试图显示正常数组的内容,它会垂直列出内容.我正在我的课程中实现Screen.
例如,
ArrayList<String> PartyListEntries = new ArrayList<>();
private List PartyList = new List(skin);
PartyListEntries.add("ham");
PartyListEntries.add("hag");
PartyListEntries.add("ham");
PartyList.setItems(PartyListEntries);
table.setFillParent(true);
table.top().left().padTop(10).padLeft(10);
table.add(PartyList);
stage.addActor(table);
Run Code Online (Sandbox Code Playgroud)
这表明:[火腿,哈格,火腿]
但是如果我创建一个String数组并且数组内容为{"ham","hag","ham"}
然后它显示
[火腿]
[魔女]
[火腿]
水平(没有换行符).
这是我列表的第一个问题.我的第二个问题是,当字符串值相同时,它会选择它们.在第二个例子中,如果我将默认选择设置为索引零,则将索引0 [ham]和索引2 [ham]都设置为选中状态.它将对每个与所选内容具有相同值的字符串执行此操作.我......不希望它这样做.我希望他们被视为独特的,因为他们是.
我正在尝试查看List的代码,但说实话,它超出了我的范畴.我不知道是什么原因引起了这些问题.我真的可以试着想出来,我可能会花费很长时间,但我想也许你们已经知道造成这种情况的原因了.或者也许可以给我一个很好的替代List.
谢谢!