在我定义map使用foldr问题之后,我想到了:
如果可以定义map使用foldr,相反的是什么?
从我的观点来看,这是不可能的,但我找不到合适的解释.谢谢您的帮助!
为什么下面的代码中map()输出有区别?
var y = [1,2,2,1];
var t = y.map(ind => [...Array(ind)].map((_,i) => ind+""+i));
// This makes [ [ '10' ], [ '20', '21' ], [ '20', '21' ], [ '10' ] ]
var t1 = y.map(ind => Array(ind).map((_,i) => ind+""+i));
//[ [ <1 empty item> ], [ <2 empty items> ], [ <2 empty items> ], [ <1 empty item> ] ]
Run Code Online (Sandbox Code Playgroud) 除了最后一个列表元素外,如何最好地映射列表的所有元素?
假设我们有一个列表let l = [1,2,3,4]并希望得到[2,3,4,4].
我确实有一个解决方案,但它感觉不像是"功能"的方式(在ghci中):
let l = [1,2,3,4]
let len = toIntegral $ length l -- to avoid a type mismatch Integer <-> Int
let l1 = zip l [1..]
let l2 = map (\(x,y) -> if y < len then (x + 1,y) else (x,y)) l1
let l3 = map (fst) l2
Run Code Online (Sandbox Code Playgroud)
不太好......我希望有更好的方法!由于我是函数式编程的新手,我不知道从哪里开始寻找它.
有点困惑.fmap听起来它可以在map所有的列表中Maybe,但如果我使用eg,我无法让它工作fApplyFunctor = (+1) <$> [Just 1, Just 2].
看起来完美无缺的是:map ((+1) <$>) [Just 1, Just 2, Just 3].从某种意义上来说,这似乎有点矫枉过正,我记得fmap已经可以做到这一点......
假设我有一个列表,我想使用映射函数向其中添加一些值:
const arr = [1, 2, 3, 4, 5];
const anotherArr = [];
Run Code Online (Sandbox Code Playgroud)
我使用函数式方法来做到这一点:
arr.map((item) => anotherArr.push(item));
Run Code Online (Sandbox Code Playgroud)
这是一个反模式/错误的逻辑——也就是说,不使用映射操作返回值做任何事情?这方面有什么好的资源吗?
(我知道这个逻辑很愚蠢,我可以复制列表 - 这不是我的问题的重点)
我需要计算 Functional Java 中单词列表中元音的数量。如果我有这个清单:
List<String> l = Arrays.asList("hello", "world", "test");
Run Code Online (Sandbox Code Playgroud)
我的想法是“删除”元音,然后以这种方式进行减法:
int tot = l.stream().map(s -> s.replace("a", "")).
map(s -> s.replace("e", "")).
map(s -> s.replace("i", "")).
map(s -> s.replace("o", "")).
map(s -> s.replace("u", "")).
map(s -> s.length()).reduce(0, Integer::sum);
int res = l.stream().map(s->s.length()).reduce(0, Integer::sum)-tot;
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?
在Scala中的函数式编程一书中,有一个"Lift"的例子,其中一个类型的函数A => B被提升为Option[A] => Option[B].
这就是电梯的实施方式:
def lift[A,B](f: A => B):Option[A] => Option[B] = _ map f
Run Code Online (Sandbox Code Playgroud)
我对此有几个困惑:
第一个是,这里的'_'是什么?其次,当我从def中删除返回类型时,期望类型推断能够发挥它的魔力,我得到以下异常:
scala> def lift[A,B](f: A => B) = _ map f
<console>:7: error: missing parameter type for expanded function ((x$1) => x$1.map(f))
def lift[A,B](f: A => B) = _ map f
Run Code Online (Sandbox Code Playgroud)
有人能解释一下这里发生了什么吗?
谢谢
scala type-inference higher-order-functions lifting map-function
我正在尝试过滤从 Azure CLI 获得的普通列表,并且正在努力构建一个正确过滤列表的查询。一个封装了我要完成的任务的示例是尝试过滤列表[1, 2, 3, 4, 5]并尝试获取大于 2 的所有值。
使用 jq,我可以这样做:echo "[1, 2, 3, 4, 5]" | jq "map(select(. > 2))"给[3, 4, 5 ]. 据我所知,问题在于无法在 JMESPath 中指示“当前元素”,而没有特定的键可供参考。
我将如何使用 JMESPath 查询过滤像这样的简单列表?
有时,我通过反复应用map来构建事物,然后让python一次执行所有操作。
例如,我可以建立如下范围列表:
foo = [256]*3
foo = map(range, foo)
foo = map(list, foo)
Run Code Online (Sandbox Code Playgroud)
到目前为止,我所拥有的只是一个包含3个项目的列表,以及几个地图对象。懒惰了。如果在这一点上我想求值foo,我可以调用,例如,list(foo)所有maps都将执行,并且我将得到一个嵌套的范围列表。
但是,假设我想在一个foo就位的函数上映射一个函数。
foo = [256]*3
foo = map(range, foo)
foo = map(list, foo)
in_place_op = map(lambda x: x.sort(reverse=True), foo)
Run Code Online (Sandbox Code Playgroud)
如果我尝试评估in_place_op,它将无法正确应用于的要素foo。即使我继续进行评估foo,也会发生这种情况,因为它in_place_op已应用于指向以下位置的地图foo:
foo = [256]*3
foo = map(range, foo)
foo = map(list, foo)
in_place_op = map(lambda x: x.sort(reverse=True), foo)
foo = list(foo)
list(in_place_op)
print(foo)
#[[1,2,3...],[1,2,3...],[1,2,3...]]
#expected [[255,254,...],...]
Run Code Online (Sandbox Code Playgroud)
为了得到这个工作,我不得不list(foo) 之前 map …
我想在与维度为[batch_size, H, W, n_channels]的矩阵中每个像素的深度通道相对应的每个向量上映射一个 TensorFlow 函数。
换句话说,对于批次中大小为H x W的每个图像:
下面有一张解释该过程的图片。与图片的唯一区别是输入和输出“感受野”的大小均为 1x1(独立地将函数应用于每个像素)。
这类似于对矩阵应用 1x1 卷积;但是,我需要在深度通道上应用更通用的函数,而不是简单的求和运算。
我认为tf.map_fn()可能是一个选项,我尝试了以下解决方案,其中我递归地使用tf.map_fn()来访问与每个像素相关的功能。然而,这种似乎不是最优的,最重要的是,它在尝试反向传播梯度时会引发错误。
您知道发生这种情况的原因以及我应该如何构建代码以避免错误吗?
这是我当前对该功能的实现:
import tensorflow as tf
from tensorflow import layers
def apply_function_on_pixel_features(incoming):
# at first the input is [None, W, H, n_channels]
if len(incoming.get_shape()) > 1: …Run Code Online (Sandbox Code Playgroud) map-function ×10
haskell ×3
arrays ×2
javascript ×2
fold ×1
functor ×1
gradient ×1
java ×1
jmespath ×1
lifting ×1
list ×1
nested ×1
python ×1
python-3.x ×1
scala ×1
tensorflow ×1