信不信由你,在分析我当前的代码之后,numpy数组reversion的重复操作占用了运行时间的一大块.我现在拥有的是基于视图的常见方法:
reversed_arr = arr[::-1]
Run Code Online (Sandbox Code Playgroud)
有没有其他方法可以更有效地做到这一点,还是仅仅因为我对不切实际的numpy表现的痴迷而产生的错觉?
有人可以向我解释meshgridNumpy功能的目的是什么?我知道它会为绘图创建某种坐标网格,但我无法真正看到它的直接好处.
我正在学习Sebastian Raschka的"Python机器学习",他正在使用它来绘制决策边界.请参见此处的输入11 .
我也从官方文档中尝试过这段代码,但是,输出对我来说并没有多大意义.
x = np.arange(-5, 5, 1)
y = np.arange(-5, 5, 1)
xx, yy = np.meshgrid(x, y, sparse=True)
z = np.sin(xx**2 + yy**2) / (xx**2 + yy**2)
h = plt.contourf(x,y,z)
Run Code Online (Sandbox Code Playgroud)
如果可能的话,请向我展示很多现实世界的例子.
我尝试过与其他问题不同的方法,但似乎仍无法找到问题的正确答案.关键的一点是,如果这个人被算作西班牙裔,他们就不能算作别的了.即使他们在另一个种族栏目中有"1",他们仍被视为西班牙裔,而不是两个或更多种族.同样,如果所有ERI列的总和大于1,则它们被计为两个或更多种族,不能被视为独特的种族(接受西班牙裔).希望这是有道理的.任何帮助将不胜感激.
它几乎就像在每行中执行for循环一样,如果每条记录符合条件,它们将被添加到一个列表中并从原始列表中删除.
从下面的数据框中,我需要根据以下内容计算新列:
========================= CRITERIA ======================== =======
IF [ERI_Hispanic] = 1 THEN RETURN “Hispanic”
ELSE IF SUM([ERI_AmerInd_AKNatv] + [ERI_Asian] + [ERI_Black_Afr.Amer] + [ERI_HI_PacIsl] + [ERI_White]) > 1 THEN RETURN “Two or More”
ELSE IF [ERI_AmerInd_AKNatv] = 1 THEN RETURN “A/I AK Native”
ELSE IF [ERI_Asian] = 1 THEN RETURN “Asian”
ELSE IF [ERI_Black_Afr.Amer] = 1 THEN RETURN “Black/AA”
ELSE IF [ERI_HI_PacIsl] = 1 THEN RETURN “Haw/Pac Isl.”
ELSE IF [ERI_White] = 1 THEN RETURN “White”
Run Code Online (Sandbox Code Playgroud)
评论:如果西班牙裔美国人的ERI标志为真(1),那么员工被归类为"西班牙裔"
评论:如果超过1个非西班牙语ERI标志为真,则返回"两个或更多"
====================== DATAFRAME =========================== …
SciPy似乎在其自己的命名空间中提供了大多数(但不是全部[1])的NumPy函数.换句话说,如果有一个名为的函数numpy.foo,几乎可以肯定的是scipy.foo.大多数情况下,两者看起来完全相同,通常甚至指向同一个函数对象.
有时,他们是不同的.举一个最近出现的例子:
numpy.log10是一个返回NaNs为负参数的ufunc ;scipy.log10 返回负参数的复数值,并且看起来不是ufunc.同样可以说,大约log,log2和logn,但不是关于log1p[2].
另一方面,numpy.exp并且scipy.exp对于相同的ufunc看起来是不同的名称.这也是真正的scipy.log1p和numpy.log1p.
另一个例子是numpy.linalg.solveVS scipy.linalg.solve.它们相似,但后者提供了一些额外的功能.
为什么明显重复?如果这是numpy对scipy命名空间的批量导入,为什么行为和缺失函数的微妙差异?是否有一些总体逻辑可以帮助消除混乱?
[1] ,,numpy.min 和其他几个人都在没有同行的命名空间.numpy.maxnumpy.absscipy
[2]使用NumPy 1.5.1和SciPy 0.9.0rc2进行测试.
这是我生成数据帧的代码:
import pandas as pd
import numpy as np
dff = pd.DataFrame(np.random.randn(1,2),columns=list('AB'))
Run Code Online (Sandbox Code Playgroud)
然后我得到了数据帧:
+------------+---------+--------+
| | A | B |
+------------+---------+---------
| 0 | 0.626386| 1.52325|
+------------+---------+--------+
Run Code Online (Sandbox Code Playgroud)
当我输入命令时:
dff.mean(axis=1)
Run Code Online (Sandbox Code Playgroud)
我有 :
0 1.074821
dtype: float64
Run Code Online (Sandbox Code Playgroud)
根据pandas的引用,axis = 1代表列,我期望命令的结果
A 0.626386
B 1.523255
dtype: float64
Run Code Online (Sandbox Code Playgroud)
所以这是我的问题:熊猫中的轴是什么意思?
我从CSV文件中加载了一些机器学习数据.前两列是观察,其余列是特征.
目前,我做以下事项:
data = pandas.read_csv('mydata.csv')
Run Code Online (Sandbox Code Playgroud)
这给出了类似的东西:
data = pandas.DataFrame(np.random.rand(10,5), columns = list('abcde'))
Run Code Online (Sandbox Code Playgroud)
我想两个dataframes切片此数据框:一个包含列a,并b和包含列一个c,d和e.
写不出类似的东西是不可能的
observations = data[:'c']
features = data['c':]
Run Code Online (Sandbox Code Playgroud)
我不确定最好的方法是什么.我需要一个pd.Panel吗?
顺便说一句,我发现数据帧索引非常不一致:data['a']是允许的,但data[0]不是.另一方面,data['a':]不允许,但是data[0:].这是否有实际原因?如果列被Int索引,这实在令人困惑data[0] != data[0:1]
我有一个由列表列表组成的Numpy数组,表示带有行标签和列名的二维数组,如下所示:
data = array([['','Col1','Col2'],['Row1',1,2],['Row2',3,4]])
Run Code Online (Sandbox Code Playgroud)
我希望生成的DataFrame将Row1和Row2作为索引值,将Col1,Col2作为标题值
我可以指定索引如下:
df = pd.DataFrame(data,index=data[:,0]),
Run Code Online (Sandbox Code Playgroud)
但我不确定如何最好地分配列标题.
我有一个Numpy数组类型的矩阵.我如何将其作为图像写入磁盘?任何格式都有效(png,jpeg,bmp ......).一个重要的限制是PIL不存在.
我在NumPy中有两个简单的一维数组.我应该能够使用numpy.concatenate连接它们.但我得到以下代码的错误:
TypeError:只能将length-1数组转换为Python标量
import numpy
a = numpy.array([1, 2, 3])
b = numpy.array([5, 6])
numpy.concatenate(a, b)
Run Code Online (Sandbox Code Playgroud)
为什么?
从Udacity的深度学习类中,y_i的softmax只是指数除以整个Y向量的指数之和:
哪里S(y_i)是的SOFTMAX功能y_i,并e为指数和j是否定的.输入向量Y中的列数.
我尝试过以下方法:
import numpy as np
def softmax(x):
"""Compute softmax values for each sets of scores in x."""
e_x = np.exp(x - np.max(x))
return e_x / e_x.sum()
scores = [3.0, 1.0, 0.2]
print(softmax(scores))
Run Code Online (Sandbox Code Playgroud)
返回:
[ 0.8360188 0.11314284 0.05083836]
Run Code Online (Sandbox Code Playgroud)
但建议的解决方案是:
def softmax(x):
"""Compute softmax values for each sets of scores in x."""
return np.exp(x) / np.sum(np.exp(x), axis=0)
Run Code Online (Sandbox Code Playgroud)
它产生与第一个实现相同的输出,即使第一个实现显式获取每列和最大值的差异,然后除以总和.
有人可以用数学方式显示原因吗?一个是正确的而另一个是错的吗?
实现在代码和时间复杂性方面是否相似?哪个更有效率?