- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个很长的数组,我正在尝试以尽可能高效的方式执行以下操作:
对于列表中每个连续递增的 block ,我必须颠倒它的顺序。
所以,对于下面的数组:
a = np.array([1,5,7,3,2,5,4,45,1,5,10,12])
我想获得:
array([7,5,1,3,5,2,45,4,12,10,5,1])
我想知道是否可以使用 numpy
将其矢量化?
我在this中已经有了一些答案previous question,但是结果,虽然是很大的改进,但是还是有点慢。
最佳答案
没有依赖的其他选项:
array = [1,5,7,3,2,5,4,45,1,5,10,12]
res, memo = [], []
for e in array:
if len(memo) == 0 or e > memo[-1]: memo.append(e)
else:
res.extend(reversed(memo))
memo = [e]
res.extend(reversed(memo))
res # => [7, 5, 1, 3, 5, 2, 45, 4, 12, 10, 5, 1]
def reverse_if_chunck_increases(array):
res, memo, last_memo = [], [], None
for e in array:
if not last_memo or e > last_memo:
last_memo = e
memo.append(e)
else:
res.extend(memo[::-1])
last_memo, memo = e, [e]
res.extend(memo[::-1])
return res
print(reverse_if_chunck_increases(array) == [7, 5, 1, 3, 5, 2, 45, 4, 12, 10, 5, 1])
#=> True
我能够如此轻松地获得结果,并且显然在 Ruby 中编码速度更快:
array.chunk_while { |x, y| x < y }.flat_map{ |chunk| chunk.reverse }
所以,我想知道为什么没有像chunk_while
这样的itertool
。然后我尝试使用 yield
编写一个类似的代码:
def reverse_if_chunk_increases(array):
i, x, size, res = 0, 0, len(array), []
while i < size-1:
if array[i] > array[i+1]:
yield array[x:i+1][::-1]
x = i +1
i += 1
yield array[x:size][::-1]
执行速度超快,但它返回一个生成器来迭代而不是列表:
chunks = reverse_if_chunk_increases(array)
for chunk in chunks:
print(chunk)
# [7, 5, 1]
# [3]
# [5, 2]
# [45, 4]
# [12, 10, 5, 1]
可以转换成列表,这是最慢的过程。请注意,生成器可以被调用一次。删除 [::-1]
您会得到类似于 Ruby 枚举器/生成器 chunk_while
的结果。
关于python - 倒序顺序数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54013340/
我有这样的代码: Main 1 2 3 Another 4 5 我希望输出为: Main 3 2 1 Another 5 4 我正在尝试使用以下内容,但它无法正常工作: $.fn.reverseOrd
我在这个网站上找到了一个评论查询示例,它与我当前的数据库结构完美配合。 链接:How to make comment reply query in MYSQL? 接受的答案有效,但我想知道是否可以颠倒
我有带有字典列表(item0,item1,item2)的列表的Plist ..通常当我在屏幕上显示时..它按升序填充...item0 然后 item1 然后 item2......等等..我希望 Pl
我正在以相反的顺序使用回收站 View 来显示聊天记录。 如果聊天中只有一条消息,它会在底部显示消息(如电报)。但我需要从顶部显示它。 我被困在这一天了。谁能给我一个建议,让我以 Recyclervi
如何按数字从高到低对数组进行排序。 数组 ArrayList array1 = new ArrayList<>(); 类 public class TestClass{ public boole
欢迎, 我想知道是否可以在“按 desc 排序”排序中反转返回的数据,但我希望该数据以相反的顺序。 例如,我得到了带有值的表 ID 1 2 3 4 我愿意 按 ID 排序 ASC LIMIT 3我得到
我正在尝试在 FireFox 中模拟输入类型='number' 的逗号插入,因为它尚不支持它。天真地它在 Chrome 中工作。我让我的正则表达式开始工作...只是顺序不对,我需要将其反转。 http
我浏览了很多关于 z-index 的页面。这个例子应该在顶部显示棕色的数字列表(更高的 z-index?)而不是蓝色的文本框。 CSS 在此处的 HTML 中以便于调试: 我的理解是,只要两个 blo
从表中选择 id LIMIT 8, 3 结果在 8,9,10 但我需要 10,9,8 你怎么能做到这一点?如果您添加“ORDER BY id DESC”,它会得到 3,2,1 最佳答案 将您的查询放在
我想在使用 desc 后反转 SQL Server 中结果的顺序。例如: SELECT TOP 3 * FROM table ORDER BY id DESC 返回结果: 505 504 503 但是
我正在编写一条 Oracle SQL 语句来获取最近日期的值。如果我的表格如下所示: +============+=================+ | sv_version | sv_date_a
我正在编写一条 Oracle SQL 语句来获取最近日期的值。如果我的表格如下所示: +============+=================+ | sv_version | sv_date_a
我是一名优秀的程序员,十分优秀!