- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Data.Array
不为 Array
提供折叠类型。
在 Real World Haskell(第 12 章)中,据说原因是 Array
s 可以根据程序员的需要以不同的方式折叠:
First of all, there are several kinds of folds that make sense. We might still want to fold over single elements, but we now have the possibility of folding over rows or columns, too. On top of this, for element-at-a-time folding, there are no longer just two sequences for traversal.
List
的真实情况吗? ?表示例如很常见一个多维矩阵
List
,但仍有为一维定义的折叠
List
s。
Array
与
Array
完全不同的
Array
?
Data.Foldable
.[0] 那么这与 Real World Haskell 的引用有什么关系呢?
最佳答案
既然你提到了“多维”之间的区别 Array
和一个 Array
的 Array
s,这将很好地说明这一点,同时与列表进行比较。
折叠(在 Foldable
类意义上)是固有的线性操作,就像列表是固有的线性结构一样;右折叠通过将其构造函数与 foldr
的参数一对一匹配来完全表征列表。 .虽然你可以定义像 foldl
这样的函数同样,有一个标准的规范折叠的明确选择。Array
没有这样的透明结构可以在折叠中一对一匹配。它是一种抽象类型,可以访问由索引值提供的单个元素,索引值可以是具有 Ix
的任何类型。实例。因此,不仅没有单一的明显选择来实现折叠,而且也没有内在的线性结构。确实如此,Ix
让您枚举一系列索引,但这更多的是实现细节。
多维怎么样Array
?它们实际上并不存在。 Ix
为也是实例的类型的元组定义实例,如果您想将此类元组视为“多维”的索引类型 Array
, 前进!但它们仍然只是元组。显然,Ix
在这些元组上放置一些线性顺序,但它是什么?你能在文档中找到任何告诉你的东西吗?
所以,我认为我们可以有把握地说折叠一个多维 Array
使用 Ix
定义的顺序是不明智的,除非您真的不在乎获取元素的顺序。
对于 Array
的 Array
s,另一方面,只有一种合理的方式来组合它们,就像嵌套列表一样:折叠每个内部 Array
分别按照自己的元素顺序,然后按照外层Array
折叠每个的结果的元素顺序。
现在,您可能会合理地反对,因为一维和多维之间没有类型区别 Array
s,并且可以假设前者具有基于 Ix
的合理折叠顺序。例如,为什么不默认使用该顺序?已经有一个函数可以返回 Array
的元素毕竟在一个列表中。
事实证明,图书馆本身会同意你的看法,因为这正是 Foldable
的内容。实例确实如此。
关于higher-order-functions - 为什么 Haskell 不为一维数组提供折叠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12335664/
我有一个 Haskell 程序,它用 Metropolis 模拟 Ising 模型 算法。主要操作是一个模板操作,它需要下一个的总和 2D 中的邻居,然后将其与中心元素相乘。那么 元素可能已更新。 在
对于卷积,我想在一个维度上应用圆形填充,在所有其他维度上应用零填充。我该怎么做? 对于卷积,有 28 个 channel ,并且数据在球形箱中描述。半径时间有 20 个箱子,极地时间有 20 个箱子,
假设您有一个数组并想创建另一个数组,该数组的值连续等于第一个数组的 10 个元素的标准差。在 for 循环的帮助下,它可以像下面的代码一样轻松编写。我想要做的是避免使用 for 循环来加快执行时间。有
我有一个长度为size * size的一维数组,表示值的平方字段。 我的目标是将数组旋转到位(previous question)。我目前在获取正确的内圈索引方面遇到问题。我的算法有什么错误? 这是我
stride = 1 和 1 个过滤器的 1D CNN 的输出长度不应该等于输入长度而不需要填充吗? 我认为是这种情况,但创建了一个具有这些规范的 Keras 模型,当输入形状为 (17910,1)
我有一个零散布的一维数组。想创建第二个数组,其中包含最后一个零的位置,如下所示: >>> a = np.array([1, 0, 3, 2, 0, 3, 5, 8, 0, 7, 12]) >>> fo
我试着去理解卡尔曼滤波器是如何工作的,因为多维变量太混乱了,一开始我从一维的例子开始。 我发现有3个不同的来源解释温度计的情况,但所有这些情况实现的方程略有不同,我没有得到重点。 我实现了解决方案2,
我有一个二维数组,我需要将它转换为一个列表(同一对象)。我不想使用 for 或 foreach 循环来执行此操作,它们将获取每个元素并将其添加到列表中。还有其他方法吗? 最佳答案 好吧,你可以让它使用
我正在使用 Keras 构建一个 CNN,将以下 Conv1D 作为我的第一层: cnn.add(Conv1D( filters=512, kernel_size=3, str
在 Python 中使用 TensorFlow,我正在制作一个以一维数组作为输入的神经网络。我想在网络中添加一个卷积层,但似乎无法让它工作。 我的训练数据如下所示: n_samples = 20 le
我有一个简单的一维数组,但我想使用 jQuery 将长列表分成两列。我怎样才能实现这个目标? var articles = ['article10','article9','article8','ar
我有一个刚从文件中读入的 float 的一维 vector 。 std::vector result(s.size() / sizeof(float)); 我想像这样使用这些数据 myTable[rl
使用 numpy 将 data reshape 为 fencepost 的最有效方法是什么? data = np.array([1, 2, 3, 4, 5])
我正在尝试通过删除 for 循环并仅在处理大型数据集时使用 numpy 数组来优化一些代码。 我想采用一维 numpy 数组,例如: a = [1, 2, 3, 4, 5] 并生成一个 2D nump
我正在尝试为两个数组 Pages 和 Price 赋值。 #include int main() { static int pages[3]; static int price[3];
我是深度学习、keras API 和卷积网络的新手,如果这些错误是幼稚的,请事先致歉。我正在尝试构建一个用于分类的简单卷积神经网络。输入数据 X 有 286 个样本,每个样本有 500 个时间点,4
假设我有 Numpy 数组 p 和一个 Scipy 稀疏矩阵 q 这样 >>> p.shape (10,) >>> q.shape (10,100) 我想做 p 和 q 的点积。当我尝试使用 nump
我需要一些行为类似于 std::vector 的东西(界面/功能/等)但我需要它是平坦的,即它不能动态分配缓冲区。显然,这通常不起作用,因为可用大小必须在编译时确定。但我希望类型能够处理N没有额外分配
作为我正在运行的一些模拟的一部分,我需要最终对一些非常长的(实数)数字序列执行以下操作。这是要点: 给定一个长的一维 NumPy 数组,对于数组中的每个位置,我想对该位置前后的值进行平均,取平均值之间
这个问题在这里已经有了答案: Concatenating two one-dimensional NumPy arrays (6 个答案) 关闭 5 年前。 我想将 numpy 数组存储到另一个 n
我是一名优秀的程序员,十分优秀!