我需要在Python的切片表示法上有一个很好的解释(引用是一个加号).
对我来说,这种符号需要一点点提升.
它看起来非常强大,但我还没有完全了解它.
在一个程序中,我写的是需要旋转一个二维数组.寻找最佳解决方案我找到了这个令人印象深刻的单线工作:
rotated = zip(*original[::-1])
Run Code Online (Sandbox Code Playgroud)
我现在正在我的程序中使用它,它可以正常运行.我的问题是,我不明白它是如何工作的.
如果有人能解释所涉及的不同功能如何达到预期效果,我将不胜感激.
用于表示和旋转俄罗斯方块游戏的最佳算法(和解释)是什么?我总是发现片段旋转和表示方案令人困惑.
大多数俄罗斯方块游戏似乎在每次轮换时都使用了一个天真的"重制阵列块":
http://www.codeplex.com/Project/ProjectDirectory.aspx?ProjectSearchText=tetris
但是,有些人使用预先构建的编码数字和位移来表示每个部分:
http://www.codeplex.com/wintris
有没有一种方法可以使用数学来做到这一点(不确定哪种方法适用于基于单元的电路板)?
是否有更快的方法将大位图旋转90或270度而不是简单地使用倒置坐标进行嵌套循环?
位图是8bpp,通常是2048*2400*8bpp
目前我只是简单地使用参数反转进行复制(伪代码:
for x = 0 to 2048-1
for y = 0 to 2048-1
dest[x][y]=src[y][x];
Run Code Online (Sandbox Code Playgroud)
(实际上我是用指针做的,速度要快一点,但大小差不多)
对于大图像,GDI非常慢,纹理(GF7卡)的GPU加载/存储时间与当前CPU时间的大小相同.
任何提示,指针?就地算法甚至会更好,但速度比就地更重要.
Target是Delphi,但它更像是一个算法问题.SSE(2)矢量化没问题,对我来说,在汇编程序中编码它是一个很大的问题
跟进尼尔斯的回答
旧例程的时间:32ms(步骤1)
步长8:12ms的时间
步长16:10ms的时间
步长32+:9ms的时间
与此同时,我还在Athlon 64 X2(5200+ iirc)上进行了测试,其速度略高于四倍(80到19毫秒).
加速非常值得,谢谢.也许在夏季我会用SSE(2)版本折磨自己.但是我已经考虑过如何解决这个问题了,我想我会用完SSE2寄存器来实现直接实现:
for n:=0 to 7 do
begin
load r0, <source+n*rowsize>
shift byte from r0 into r1
shift byte from r0 into r2
..
shift byte from r0 into r8
end;
store r1, <target>
store r2, <target+1*<rowsize> …Run Code Online (Sandbox Code Playgroud) (披露,我主要是数学文盲).
我有这种格式的数组:
var grid = [
[0,0], [0,1], [0,2], [0,3],
[1,0], [1,1], [1,2], [1,3],
[2,0], [2,1], [2,2], [2,3],
[3,0], [3,1], [3,2], [3,3]
];
Run Code Online (Sandbox Code Playgroud)
我需要以90度的增量"旋转"它,所以它是这样的:
var grid = [
[3,0], [2,0], [1,0], [0,0],
[3,1], [2,1], [1,1], [0,1],
[3,2], [2,2], [1,2], [0,2],
[3,3], [2,3], [1,3], [0,3]
];
Run Code Online (Sandbox Code Playgroud)
如何在Javascript中完成此操作?
我有一个图像的像素数据数组.我得到的图像已经旋转到270度.所以我试图再次旋转90度以获得正确的图像.我已经尝试了转置算法,通过更改data[x][y]为data[y][x],但我不认为这是正确的方法.任何人都可以指导我如何旋转它?
我有一个列表列表,我需要旋转90度.我设法获得了第一个新行,但是我无法获得其他任何一个,所以我把for循环放入一个函数中,我每次迭代都增加了一个计数,但我刚刚给终端打印了一大堆.
grid = [['.', '.', '.', '.', '.', '.'],
['.', '0', '0', '.', '.', '.'],
['0', '0', '0', '0', '.', '.'],
['0', '0', '0', '0', '0', '.'],
['.', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '.'],
['0', '0', '0', '0', '.', '.'],
['.', '0', '0', '.', '.', '.'],
['.', '.', '.', '.', '.', '.']]
Run Code Online (Sandbox Code Playgroud)
我需要如何旋转.
'''
..00.00..
.0000000.
.0000000.
..00000..
...000...
....0....
'''
Run Code Online (Sandbox Code Playgroud)
我的代码
def get_row(grid, new_grid, new_row, count):
for row in grid:
new_row.append(row[count])
new_grid.append(new_row)
new_grid = …Run Code Online (Sandbox Code Playgroud) 在寻找旋转矩阵的pythonic方法时,我遇到了这个答案.但是没有附加说明.我在这里复制了片段:
rotated = zip(*original[::-1])
Run Code Online (Sandbox Code Playgroud)
它是如何工作的?
我正在尝试创建一个tic-tac-toe程序作为心理练习,我将董事会状态存储为booleans,如下所示:
http://i.imgur.com/xBiuoAO.png
我想简化这个布尔表达式......
(a&b&c) | (d&e&f) | (g&h&i) | (a&d&g) | (b&e&h) | (c&f&i) | (a&e&i) | (g&e&c)
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是使用卡诺图,但没有在线求解器支持9个变量.
并且还有一个问题:
首先,我如何知道布尔条件是否已经尽可能简单?
第二个:上面简化的布尔条件是什么?