本文将为您提供关于NumPySum的详细介绍,我们还将为您解释带轴如何工作?的相关知识,同时,我们还将为您提供关于df.combine()如何工作?、IEnumerablevsList-使用什么?它们
本文将为您提供关于NumPy Sum的详细介绍,我们还将为您解释带轴如何工作?的相关知识,同时,我们还将为您提供关于df.combine()如何工作?、IEnumerable vs List - 使用什么? 它们如何工作?、IEnumerable vs List-使用什么?它们如何工作?、Linux二进制安装程序(.bin,.sh)如何工作?的实用信息。
本文目录一览:- NumPy Sum(带轴)如何工作?(numpy中的轴)
- df.combine()如何工作?
- IEnumerable vs List - 使用什么? 它们如何工作?
- IEnumerable vs List-使用什么?它们如何工作?
- Linux二进制安装程序(.bin,.sh)如何工作?
NumPy Sum(带轴)如何工作?(numpy中的轴)
我已经学会了如何根据自己NumPy
的好奇心来工作。
似乎最简单的功能最难翻译为代码(我理解代码)。对每种情况的每个轴进行硬编码很容易,但是我想找到一种动态算法,可以在任何轴上以n维求和。官方网站上的文档没有帮助(仅显示结果而不显示过程),并且很难浏览Python/ C代码。
注意: 我确实弄清楚了当对一个数组求和时,指定的轴是“已删除”,即,形状为(4,3,2)且轴为1的数组的总和会得出形状为的数组的答案(4,2)
df.combine()如何工作?
来自docs
中的示例take_smaller = lambda s1,s2: s1 if s1.sum() < s2.sum() else s2
这表示如果df1中的序列之和小于df2中的序列之和,则从df1返回序列,否则从df2返回。
因此,当您这样做时:
df1.combine(df2,take_smaller)
A B
0 0 3.0
1 0 0.0
这很好。
但是,当您执行fill_value=-5
时,第一个数据帧中的第二个序列的总和会变小,因为fill_value
首先填充了NaN然后进行比较。 (-5 + 4)-5 and 4。
,fill_value标量值,默认为无 在将任何列传递到合并函数之前用NaN填充的值。
我想您是指doc example
take_smaller = lambda s1,s2: s1 if s1.sum() < s2.sum() else s2
如果是
这里您使用的是fill_value=-5
,因此传递给函数的列B
将是
[-5,4]
和[3,0]
因此-5 + 4 = -1
小于3 + 0 = 3
,因此[-5,4]
返回。
IEnumerable vs List - 使用什么? 它们如何工作?
我对 Enumerators 和 LINQ 的工作方式有疑问。 考虑以下两个简单选择:
List<Animal> sel = (from animal in Animals
join race in Species
on animal.SpeciesKey equals race.SpeciesKey
select animal).Distinct().ToList();
要么
IEnumerable<Animal> sel = (from animal in Animals
join race in Species
on animal.SpeciesKey equals race.SpeciesKey
select animal).Distinct();
我更改了原始对象的名称,以使其看起来像一个更通用的示例。 查询本身不是那么重要。 我想问的是:
foreach (Animal animal in sel) { /*do stuff*/ }
我注意到,如果我使用
IEnumerable
,则在调试和检查 “sel”(在这种情况下就是 IEnumerable)时,它具有一些有趣的成员:“ inner”,“ outer”,“ innerKeySelector” 和 “ outerKeySelector”,这最后两个似乎是代表。 “内部” 成员中没有 “动物” 实例,而是 “物种” 实例,这对我来说很奇怪。 “外部” 成员确实包含 “动物” 实例。 我假设这两个代表确定哪个进出什么?我注意到,如果我使用 “Distinct”,则 “ inner” 包含 6 个项目(这是不正确的,因为只有 2 个是 Distinct),但是 “ outer” 确实包含正确的值。 同样,可能委托方法确定了这一点,但这比我对 IEnumerable 的了解还多。
最重要的是,这两个选项中哪个是性能最佳的?
通过.ToList()
邪恶列表转换?
还是直接使用枚举器?
如果可以的话,也请解释一下或抛出一些链接来解释 IEnumerable 的用法。
#1 楼
没有人提到一个关键的差异,具有讽刺意味的是,作为一个重复的问题,有人回答了一个封闭的问题。
IEnumerable 是只读的,而 List 不是。
请参阅 List 和 IEnumerable 之间的实际区别
#2 楼
有一篇非常不错的文章由:Claudio Bernasconi 的 TechBlog 撰写: 何时使用 IEnumerable,ICollection,IList 和 List
这里是有关方案和功能的一些基本知识:
#3 楼
要实现的最重要的事情是,使用 Linq,查询不会立即得到评估。 它仅作为在 foreach
中迭代生成的 IEnumerable<T>
一部分而运行 - 这就是所有奇怪的委托正在做的事情。
因此,第一个示例通过调用 ToList
并将查询结果放入列表中来立即评估查询。
第二个示例返回一个 IEnumerable<T>
,其中包含稍后运行查询所需的所有信息。
就性能而言,答案取决于它 。 如果您需要一次评估结果(例如,您要对稍后查询的结构进行变异,或者您不希望 IEnumerable<T>
上的迭代花费很长时间),请使用列表。 否则使用 IEnumerable<T>
。 默认情况下,应该在第二个示例中使用按需评估,因为通常会使用较少的内存,除非有特殊原因将结果存储在列表中。
#4 楼
如果您只想枚举它们,请使用 IEnumerable
。
但是请注意,更改要枚举的原始集合是一项危险的操作 - 在这种情况下,您将需要首先 ToList
。 这将为内存中的每个元素创建一个新的 list 元素,枚举 IEnumerable
,因此如果仅枚举一次,则性能会降低 - 但更安全,有时 List
方法很方便(例如,在随机访问中)。
#5 楼
IEnumerable 的优点是延迟执行(通常使用数据库)。 在您实际遍历数据之前,查询将不会执行。 这是一个查询,直到需要它为止(又称延迟加载)。
如果您调用 ToList,查询将被执行,或者像我想说的那样 “物化”。
两者都有优点和缺点。 如果调用 ToList,则可以消除执行查询时的神秘性。 如果坚持使用 IEnumerable,您将获得以下优势:该程序在实际需要之前不会执行任何工作。
IEnumerable vs List-使用什么?它们如何工作?
我对Enumerators和LINQ的工作方式有疑问。考虑以下两个简单选择:
List<Animal> sel = (from animal in Animals join race in Species on animal.SpeciesKey equals race.SpeciesKey select animal).Distinct().ToList();
要么
IEnumerable<Animal> sel = (from animal in Animals join race in Species on animal.SpeciesKey equals race.SpeciesKey select animal).Distinct();
我更改了原始对象的名称,以使其看起来像一个更通用的示例。查询本身不是那么重要。我想问的是:
foreach (Animal animal in sel) { /*do stuff*/ }
我注意到,如果我使用
IEnumerable
,当我调试并检查“ sel”(在这种情况下为IEnumerable)时,它具有一些有趣的成员:“ inner”,“ outer”,“ innerKeySelector”和“ outerKeySelector”,最后两个出现成为代表。“内部”成员中没有“动物”实例,而是“物种”实例,这对我来说很奇怪。“外部”成员确实包含“动物”实例。我假设这两个代表确定哪个进出什么?我注意到,如果我使用“ Distinct”,则“ inner”包含6个项目(这是不正确的,因为只有2个是Distinct),但是“ outer”确实包含正确的值。同样,可能委托方法确定了这一点,但这比我对IEnumerable的了解还多。
最重要的是,这两个选项中哪个是性能最佳的?
邪恶列表转换通过.ToList()
?
还是直接使用枚举器?
如果可以的话,也请解释一下或抛出一些链接来解释IEnumerable的用法。
答案1
小编典典IEnumerable
描述行为,而List是该行为的实现。使用时IEnumerable
,可以使编译器有机会将工作推迟到以后,可能会一直进行优化。如果使用ToList(),则强制编译器立即对结果进行校验。
每当我“堆叠”
LINQ表达式时,我都会使用IEnumerable
,因为通过仅指定行为,LINQ就有机会推迟评估并可能优化程序。还记得LINQ如何在枚举之前不生成SQL查询数据库吗?考虑一下:
public IEnumerable<Animals> AllSpotted(){ return from a in Zoo.Animals where a.coat.HasSpots == true select a;}public IEnumerable<Animals> Feline(IEnumerable<Animals> sample){ return from a in sample where a.race.Family == "Felidae" select a;}public IEnumerable<Animals> Canine(IEnumerable<Animals> sample){ return from a in sample where a.race.Family == "Canidae" select a;}
现在,您有了一个选择初始样本(“ AllSpotted”)以及一些过滤器的方法。现在,您可以执行以下操作:
var Leopards = Feline(AllSpotted());var Hyenas = Canine(AllSpotted());
那么使用List
over更快IEnumerable
吗?仅当您要阻止查询多次执行时。但是总体上更好吗?在上面的代码中,Leopards和Hyenas分别转换为
单个SQL查询 ,并且数据库仅返回相关的行。但是,如果我们从中返回了一个ListAllSpotted()
,则它的运行速度可能会变慢,因为数据库返回的数据可能远远超过实际需要的数据,并且浪费了在客户端进行过滤的周期。
在程序中,最好将查询转换为列表直到最后,最好,因此,如果我要多次通过Leopards和Hyenas枚举,我可以这样做:
List<Animals> Leopards = Feline(AllSpotted()).ToList();List<Animals> Hyenas = Canine(AllSpotted()).ToList();
Linux二进制安装程序(.bin,.sh)如何工作?
某些软件(例如NetBeans
IDE)将Linux安装程序随附在.sh文件中。我很好奇他们如何将整个IDE打包为“
shell脚本”,我在编辑器中打开了文件。我看到了一些纯文本shell脚本代码,然后看到了一些乱码,我认为是“二进制”或非普通文本。
我想知道他们如何混合普通的shell脚本,然后可能将它们称为“不可读的”东西,即二进制文件。
有什么见解吗?
答案1
小编典典基本上,这是一个shell脚本,位于某种压缩存档(例如tar存档)之前。您可以对自己使用tail
or sed
命令($0
Bourne
shell中的变量)来剥离前面的shell脚本,并将其余的脚本传递给您的非归档器。
例如,将以下脚本创建为self-extracting
:
#!/bin/sh -esed -e ''1,/^exit$/d'' "$0" | tar xzf - && ./project/Setupexit
sed
上面的命令从文件的第一行到以“ exit”开头的第一行删除所有行,然后将其余的行继续通过。如果紧接在“
exit”行之后开始的是tar文件,则tar
命令将提取该文件。如果成功,则将执行./project/Setup
文件(可能是从tarball中提取的)。
然后:
mkdir projectecho "#!/bin/sh" > project/Setupecho "echo This is the setup script!" >> project/Setupchmod +x project/Setuptar czf - project >> self-extracting
现在,如果您摆脱了原来的project
目录,则可以运行self-extracting
,它将解压缩该tar文件并运行安装脚本。
关于NumPy Sum和带轴如何工作?的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于df.combine()如何工作?、IEnumerable vs List - 使用什么? 它们如何工作?、IEnumerable vs List-使用什么?它们如何工作?、Linux二进制安装程序(.bin,.sh)如何工作?等相关知识的信息别忘了在本站进行查找喔。
本文标签: