各有哪些优缺点?
从我所看到的情况来看,如果需要的话,任何一个都可以作为另一个的替代品,那么我是否应该使用它们或者我应该只坚持其中一个?
该计划的风格会影响我的选择吗?我正在使用numpy做一些机器学习,所以确实有很多矩阵,但也有很多向量(数组).
我想切片NumPy nxn数组.我想提取该数组的m行和列的任意选择(即行数/列数没有任何模式),使其成为一个新的mxm数组.对于这个例子,让我们说数组是4x4,我想从中提取一个2x2数组.
这是我们的数组:
from numpy import *
x = range(16)
x = reshape(x,(4,4))
print x
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
Run Code Online (Sandbox Code Playgroud)
要删除的行和列是相同的.最简单的情况是当我想要提取一个位于开头或结尾的2x2子矩阵时,即:
In [33]: x[0:2,0:2]
Out[33]:
array([[0, 1],
[4, 5]])
In [34]: x[2:,2:]
Out[34]:
array([[10, 11],
[14, 15]])
Run Code Online (Sandbox Code Playgroud)
但是,如果我需要删除另一行/列的混合物怎么办?如果我需要删除第一行和第三行/行,从而提取子矩阵[[5,7],[13,15]]
怎么办?行/行可以有任何组合.我读到某个地方,我只需要使用行和列的索引数组/列表索引我的数组,但这似乎不起作用:
In [35]: x[[1,3],[1,3]]
Out[35]: array([ 5, 15])
Run Code Online (Sandbox Code Playgroud)
我发现了一种方法,即:
In [61]: x[[1,3]][:,[1,3]]
Out[61]:
array([[ 5, 7],
[13, 15]])
Run Code Online (Sandbox Code Playgroud)
第一个问题是它几乎不可读,尽管我可以忍受它.如果有人有更好的解决方案,我当然希望听到它.
另一件事是我在一个论坛上读到,使用数组索引数组强制NumPy制作所需数组的副本,因此当处理大型数组时,这可能会成为一个问题.为什么这样/这个机制如何运作?
当我的程序运行引发异常的行时,有没有办法启动IPython shell或提示?
我最感兴趣的是引发异常的范围(和子范围)中的上下文,变量.像Visual Studio的调试,当抛出异常但没有被任何人捕获时,Visual Studio将停止并给我调用堆栈和每个级别的变量.
你认为有一种方法可以使用IPython获得类似的东西吗?
编辑:-pdb
启动IPython 的选项似乎没有做我想要的(或者我可能不知道如何正确使用它,这是完全可能的).我运行以下脚本:
def func():
z = 2
g = 'b'
raise NameError("This error will not be caught, but IPython still"
"won't summon pdb, and I won't be able to consult"
"the z or g variables.")
x = 1
y = 'a'
func()
Run Code Online (Sandbox Code Playgroud)
使用命令:
ipython -pdb exceptionTest.py
Run Code Online (Sandbox Code Playgroud)
这会在引发错误时停止执行,但会给我一个IPython提示符,其中我可以访问脚本的全局变量,但不能访问函数func的局部变量.pdb
只在我在ipython中直接输入导致错误的命令时调用,即raise NameError("This, sent from the IPython prompt, will trigger pdb.")
.
我不一定需要使用pdb
,我只想访问里面的变量func
.
编辑2:已经有一段时间了,IPython的-pdb
选项现在正如我想要的那样工作.这意味着当我提出异常时,我可以返回范围func
并读取其变量z …
我知道在eclipse中可以从项目的资源浏览器中打开文件浏览器,但是对于不属于您项目的文件是否可能?通常在资源浏览器中找不到外部包含...
如果编辑器有等效的$(resource_loc),那就可以了.但是我找不到它.谁可以帮我这个事 ?
谢谢!
编辑:我找到了StartExplorer,但它对我不起作用.使用WINDOWS explorer或cmd.exe进行硬编码.此外,它仍然需要您使用资源浏览器.除此之外,它可以打开在编辑器中选择的路径,但它们必须是完整路径.
编辑2:StartExplorer似乎已升级.我不再使用eclipse,但如果其他人仍在寻找这个,我会再看看他们的东西!
你知道有什么好的c ++ svm库我试过libsvm http://www.csie.ntu.edu.tw/~cjlin/libsvm/但是到目前为止我并没有大吃一惊.
我也听说过SVMLight和TinySVM.你试过吗?任何新球员?
谢谢 !
我有一个2x2 numpy数组:
x = array(([[1,2],[4,5]]))
Run Code Online (Sandbox Code Playgroud)
我必须与一维数组合并(或堆叠,如果你愿意):
y = array(([3,6]))
Run Code Online (Sandbox Code Playgroud)
通过将它添加到行的末尾,从而形成一个2x3 numpy数组,其输出如下:
数组([[1,2,3],[4,5,6]])
现在,在numpy指南中提出的方法是:
hstack((x,y))
Run Code Online (Sandbox Code Playgroud)
但是这不起作用,返回以下错误:
ValueError:数组必须具有相同数量的维度
可能的唯一解决方法似乎是这样做:
hstack((x, array(([y])).T ))
Run Code Online (Sandbox Code Playgroud)
这是有效的,但看起来和听起来相当hackish.似乎没有其他方法来转置给定的数组,因此hstack能够消化它.我想知道,有更清洁的方法吗?难道没有办法让numpy猜出我想做什么吗?
我知道有一种方法可以显示visual studio中解决方案中包含的每个项目的构建时间.但我正在寻找的是构建整个解决方案所花费的总时间,从我点击构建的那一刻起到完成的那一刻.
反正有没有这样做?运行Visual Studio 2008.
我在所有的python程序中使用pylab(更具体地说是numpy).例外情况非常罕见,如果有的话.到目前为止,我已经习惯了以下列方式导入numpy:
from numpy import *
Run Code Online (Sandbox Code Playgroud)
这样做的好处是从一开始就让它看起来像是python的一部分.在每个脚本中导入这样的numpy有什么不好的事吗?我的意思是除了每个脚本/程序都需要更多内存并且需要更长时间才能加载的事实.
我认为在来自numpy(例如np.zeros(3)
)的每个函数调用之前总是必须写numpy甚至np 是单调乏味的,因为它需要我知道哪个函数来自numpy而哪个函数不来.我真的不在乎零函数来自numpy或python,我只是想/需要使用它.
根据你的哪种表示法更好?
是否有任何python大师能够解释为什么这段代码不起作用:
def f(code_str):
exec(code_str)
code = """
g = 5
x = [g for i in range(5)]
"""
f(code)
Run Code Online (Sandbox Code Playgroud)
错误:
Traceback (most recent call last):
File "py_exec_test.py", line 9, in <module>
f(code)
File "py_exec_test.py", line 2, in f
exec(code_str)
File "<string>", line 3, in <module>
File "<string>", line 3, in <listcomp>
NameError: name 'g' is not defined
Run Code Online (Sandbox Code Playgroud)
虽然这个工作正常:
code = """
g = 5
x = [g for i in range(5)]
"""
exec(code)
Run Code Online (Sandbox Code Playgroud)
我知道它与locals和globals有关,就好像我从我的主范围传递exec函数locals和globals它工作正常,但我不完全理解发生了什么.
这可能是Cython的一个错误吗?
编辑:尝试使用python 3.4.0和python 3.4.3
我有一个MFC对话框,其中有两个单选按钮.我已将它们放在一个很好的组中,它们的IDC是一个接一个(RB_LEFT, RB_RIGHT
).
我想使用DDX_Radio
所以我可以使用整数值访问按钮,所以在DoDataExchange函数中我调用:
DDX_Radio(pDX, RB_LEFT, mRBLeftRight);
Run Code Online (Sandbox Code Playgroud)
其中mRBLeftRight是整数类型的成员变量.我还需要编辑按钮属性,所以我想用a DDX_Control
来映射成员变量mRBLeft和mRBRight(CButton):
DDX_Control(pDX, RB_LEFT, mRBLeft);
DDX_Control(pDX, RB_RIGHT, mRBRight);
Run Code Online (Sandbox Code Playgroud)
现在,如果我进行调用DDX_Control
,每当调用DoDataExchange时,应用程序崩溃,因为DDX_Control
强制RB_LEFT
处理DDX_Radio
无法处理的消息.这一部分我明白了.
我决定不使用DDX_Control
(删除DoDataExchange中的调用)并在我的类中保留指向我的单选按钮(CButton*)的指针.所以在我的OnInitDialog函数中,我执行以下调用:
mRBLeft= ((CButton*)GetDlgItem(RB_LEFT));
mRBRight = ((CButton*)GetDlgItem(RB_RIGHT));
Run Code Online (Sandbox Code Playgroud)
现在,只要我不使用mRBLeft就可以了,但是如果我这样做的话,bam会在DoDataExchange上崩溃.让我感到困惑的是,如果我改变我的左侧单选按钮,
((CButton*)GetDlgItem(RB_LEFT)->SetCheck(true)
它会起作用.那么有什么区别?
(我知道这很麻烦,但我只是想了解机制)
python ×6
numpy ×4
arrays ×2
c++ ×2
build-time ×1
coding-style ×1
debugging ×1
eclipse ×1
file-browser ×1
ipython ×1
libsvm ×1
matrix ×1
mfc ×1
python-exec ×1
radio-button ×1
slice ×1
svm ×1