我想定义一个没有初始化长度的二维数组,如下所示:
Matrix = [][]
Run Code Online (Sandbox Code Playgroud)
但它不起作用......
我已经尝试了下面的代码,但它也是错误的:
Matrix = [5][5]
Run Code Online (Sandbox Code Playgroud)
错误:
Traceback ...
IndexError: list index out of range
Run Code Online (Sandbox Code Playgroud)
我的错是什么?
我有一个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])
Run Code Online (Sandbox Code Playgroud)
是否有内置函数可以做到这一点?
例如,如果我想从中读取中间值magic(5)
,我可以这样做:
M = magic(5);
value = M(3,3);
Run Code Online (Sandbox Code Playgroud)
得到value == 13
.我希望能够做到这样的事情之一:
value = magic(5)(3,3);
value = (magic(5))(3,3);
Run Code Online (Sandbox Code Playgroud)
免除中间变量.然而,MATLAB抱怨Unbalanced or unexpected parenthesis or bracket
在第一个括号之前3
.
是否可以在不首先将其分配给变量的情况下从数组/矩阵中读取值?
各有哪些优缺点?
从我所看到的情况来看,如果需要的话,任何一个都可以作为另一个的替代品,那么我是否应该使用它们或者我应该只坚持其中一个?
该计划的风格会影响我的选择吗?我正在使用numpy做一些机器学习,所以确实有很多矩阵,但也有很多向量(数组).
灵感来自Raymond Chen的帖子,假设你有一个4x4二维数组,写一个旋转90度的函数.Raymond链接到伪代码的解决方案,但我希望看到一些现实世界的东西.
[1][2][3][4]
[5][6][7][8]
[9][0][1][2]
[3][4][5][6]
Run Code Online (Sandbox Code Playgroud)
变为:
[3][9][5][1]
[4][0][6][2]
[5][1][7][3]
[6][2][8][4]
Run Code Online (Sandbox Code Playgroud)
更新:尼克的答案是最直接的,但有没有办法比n ^ 2做得更好?如果矩阵是10000x10000怎么办?
在numpy
某些操作中,有些操作会返回,(R, 1)
但有些操作会返回(R,)
.这将使矩阵乘法更加繁琐,因为reshape
需要显式.例如,给定一个矩阵M
,如果我们想要做的行数numpy.dot(M[:,0], numpy.ones((1, R)))
在哪里R
(当然,同样的问题也会出现在列中).我们会得到matrices are not aligned
错误,因为M[:,0]
是在外形(R,)
,但numpy.ones((1, R))
在形状(1, R)
.
所以我的问题是:
形状(R, 1)
和形状有什么区别(R,)
.我知道字面上它是数字列表和列表列表,其中所有列表只包含一个数字.只是想知道为什么不设计numpy
使它有利于形状(R, 1)
而不是(R,)
更容易的矩阵乘法.
上面的例子有更好的方法吗?没有明确重塑像这样:numpy.dot(M[:,0].reshape(R, 1), numpy.ones((1, R)))
似乎许多项目慢慢需要进行矩阵数学运算,并陷入首先构建一些向量类并慢慢添加功能的陷阱,直到它们被捕获构建一个半定制的自定义线性代数库,并依赖于它.
我想避免这种情况,而不依赖于一些切向相关的库(例如OpenCV,OpenSceneGraph).
有哪些常用的矩阵数学/线性代数库,为什么会决定使用另一个?有什么建议不要因某些原因使用?我特意在几何/时间上下文*(2,3,4 Dim)*中使用它,但将来可能会使用更高维数据.
我正在寻找以下任何方面的差异:API,速度,内存使用,广度/完整性,狭窄/特异性,可扩展性和/或成熟度/稳定性.
我最终使用了Eigen3,我非常满意.
我有一个n x m
由非负整数组成的矩阵.例如:
2 3 4 7 1
1 5 2 6 2
4 3 4 2 1
2 1 2 4 1
3 1 3 4 1
2 1 4 3 2
6 9 1 6 4
Run Code Online (Sandbox Code Playgroud)
"掉落炸弹"会使目标小区的数量和其所有八个邻居的数量减少一个,最小为零.
x x x
x X x
x x x
Run Code Online (Sandbox Code Playgroud)
什么算法可以确定将所有单元减少到零所需的最小炸弹数量?
B选项(由于我不是一个细心的读者)
实际上问题的第一个版本并不是我想要回答的问题.我没有仔细阅读整个任务,还有其他限制,让我们说:
当行中的序列必须不增加时,简单问题怎么办:
8 7 6 6 5
是可能的输入序列
7 8 5 5 2
因为7 - > 8在序列中生长是不可能的.
也许找到"更容易"的案例的答案将有助于找到更难的解决方案.
PS:我相信当我们有几个相同的情况需要最少的炸弹来清除上线时,我们选择在该行的"左侧"使用大多数炸弹的一个.还有什么证据可能是正确的吗?
当我将两个numpy数组(nxn)*(nx 1)相乘时,得到一个大小为(nxn)的矩阵.遵循正常的矩阵乘法规则,期望一个(nx 1)向量,但我根本无法找到有关如何在Python的Numpy模块中完成此操作的任何信息.
问题是我不想手动实现它以保持程序的速度.
示例代码如下所示:
a = np.array([[ 5, 1 ,3], [ 1, 1 ,1], [ 1, 2 ,1]])
b = np.array([1, 2, 3])
print a*b
>>
[[5 2 9]
[1 2 3]
[1 4 3]]
Run Code Online (Sandbox Code Playgroud)
我想要的是:
print a*b
>>
[16 6 8]
Run Code Online (Sandbox Code Playgroud) 应该何时使用a data.frame
,何时使用matrix
?
两者都以矩形格式保存数据,因此有时候还不清楚.
有什么时候使用哪种数据类型有一般的经验法则吗?