GVKun编程网logo

NumPy Sum(带轴)如何工作?(numpy中的轴)

4

本文将为您提供关于NumPySum的详细介绍,我们还将为您解释带轴如何工作?的相关知识,同时,我们还将为您提供关于df.combine()如何工作?、IEnumerablevsList-使用什么?它们

本文将为您提供关于NumPy Sum的详细介绍,我们还将为您解释带轴如何工作?的相关知识,同时,我们还将为您提供关于df.combine()如何工作?、IEnumerable vs List - 使用什么? 它们如何工作?、IEnumerable vs List-使用什么?它们如何工作?、Linux二进制安装程序(.bin,.sh)如何工作?的实用信息。

本文目录一览:

NumPy Sum(带轴)如何工作?(numpy中的轴)

NumPy Sum(带轴)如何工作?(numpy中的轴)

我已经学会了如何根据自己NumPy的好奇心来工作。

似乎最简单的功能最难翻译为代码(我理解代码)。对每种情况的每个轴进行硬编码很容易,但是我想找到一种动态算法,可以在任何轴上以n维求和。官方网站上的文档没有帮助(仅显示结果而不显示过程),并且很难浏览Python/ C代码。

注意: 我确实弄清楚了当对一个数组求和时,指定的轴是“已删除”,即,形状为(4,3,2)且轴为1的数组的总和会得出形状为的数组的答案(4,2)

df.combine()如何工作?

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 - 使用什么? 它们如何工作?

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*/ }
  1. 我注意到,如果我使用 IEnumerable ,则在调试和检查 “sel”(在这种情况下就是 IEnumerable)时,它具有一些有趣的成员:“ inner”,“ outer”,“ innerKeySelector” 和 “ outerKeySelector”,这最后两个似乎是代表。 “内部” 成员中没有 “动物” 实例,而是 “物种” 实例,这对我来说很奇怪。 “外部” 成员确实包含 “动物” 实例。 我假设这两个代表确定哪个进出什么?

  2. 我注意到,如果我使用 “Distinct”,则 “ inner” 包含 6 个项目(这是不正确的,因为只有 2 个是 Distinct),但是 “ outer” 确实包含正确的值。 同样,可能委托方法确定了这一点,但这比我对 IEnumerable 的了解还多。

  3. 最重要的是,这两个选项中哪个是性能最佳的?

通过.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-使用什么?它们如何工作?

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*/ }
  1. 我注意到,如果我使用IEnumerable,当我调试并检查“ sel”(在这种情况下为IEnumerable)时,它具有一些有趣的成员:“ inner”,“ outer”,“ innerKeySelector”和“ outerKeySelector”,最后两个出现成为代表。“内部”成员中没有“动物”实例,而是“物种”实例,这对我来说很奇怪。“外部”成员确实包含“动物”实例。我假设这两个代表确定哪个进出什么?

  2. 我注意到,如果我使用“ Distinct”,则“ inner”包含6个项目(这是不正确的,因为只有2个是Distinct),但是“ outer”确实包含正确的值。同样,可能委托方法确定了这一点,但这比我对IEnumerable的了解还多。

  3. 最重要的是,这两个选项中哪个是性能最佳的?

邪恶列表转换通过.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查询 ,并且数据库仅返回相关的行。但是,如果我们从中返回了一个List
AllSpotted(),则它的运行速度可能会变慢,因为数据库返回的数据可能远远超过实际需要的数据,并且浪费了在客户端进行过滤的周期。

在程序中,最好将查询转换为列表直到最后,最好,因此,如果我要多次通过Leopards和Hyenas枚举,我可以这样做:

List<Animals> Leopards = Feline(AllSpotted()).ToList();List<Animals> Hyenas = Canine(AllSpotted()).ToList();

Linux二进制安装程序(.bin,.sh)如何工作?

Linux二进制安装程序(.bin,.sh)如何工作?

某些软件(例如NetBeans
IDE)将Linux安装程序随附在.sh文件中。我很好奇他们如何将整个IDE打包为“
shell脚本”,我在编辑器中打开了文件。我看到了一些纯文本shell脚本代码,然后看到了一些乱码,我认为是“二进制”或非普通文本。

我想知道他们如何混合普通的shell脚本,然后可能将它们称为“不可读的”东西,即二进制文件。

有什么见解吗?

答案1

小编典典

基本上,这是一个shell脚本,位于某种压缩存档(例如tar存档)之前。您可以对自己使用tailor sed命令($0Bourne
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)如何工作?等相关知识的信息别忘了在本站进行查找喔。

本文标签: