受Raymond Chen帖子的启发,假设你有一个4x4二维数组,写一个函数使它旋转90度。Raymond链接到伪代码中的解决方案,但我想看到一些真实的东西。

[1][2][3][4]
[5][6][7][8]
[9][0][1][2]
[3][4][5][6]

就变成:

[3][9][5][1]
[4][0][6][2]
[5][1][7][3]
[6][2][8][4]

更新:Nick的答案是最直接的,但是有没有比n²更好的方法呢?如果矩阵是10000x10000呢?

例如,如果我想读取magic(5)的中间值,我可以这样做:

M = magic(5);
value = M(3,3);

得到value == 13。我希望能够做一些像这样的事情:

value = magic(5)(3,3);
value = (magic(5))(3,3);

省略中间变量。然而,MATLAB抱怨不平衡或意外的圆括号或括号在第一个圆括号在3之前。

是否有可能从数组/矩阵读取值,而不首先分配给一个变量?

在numpy中,有些操作以形状(R, 1)返回,但有些返回(R,)。这将使矩阵乘法更加繁琐,因为需要显式重塑。例如,给定一个矩阵M,如果我们想要numpy。点(M [: 0], numpy。ones((1, R))),其中R是行数(当然,列方面也存在同样的问题)。我们将得到矩阵不是对齐错误,因为M[:,0]是在形状(R,),而是numpy。ones((1, R))的形状是(1,R)。

所以我的问题是:

形状(R, 1)和(R,)的区别是什么?我知道字面上它是一个数字的列表和列表的列表所有的列表都只包含一个数字。只是想知道为什么不设计numpy,使它更喜欢形状(R, 1)而不是(R,),以便于矩阵乘法。 对于上面的例子有没有更好的方法?不需要像这样显式地重塑:numpy.dot(M[:,0]。重塑(R, 1), numpy。((R)))

它们各自的优点和缺点是什么?

据我所知,如果需要的话,任何一种都可以作为另一种的替代品,所以我是应该同时使用两种呢,还是应该坚持使用其中一种呢?

程序的风格会影响我的选择吗?我正在使用numpy做一些机器学习,所以确实有很多矩阵,但也有很多向量(数组)。

我有一个2项元组的列表,我想将它们转换为2个列表,其中第一个包含每个元组中的第一项,第二个列表包含第二项。

例如:

original = [('a', 1), ('b', 2), ('c', 3), ('d', 4)]
# and I want to become...
result = (['a', 'b', 'c', 'd'], [1, 2, 3, 4])

有没有内置函数可以做到这一点?