编程学c语言还是j,编程语言-有人会建议学习J / K / APL吗?

这篇博客讨论了编程语言J、K和APL的使用体验,作者提到了这些语言在解决数学问题和项目欧拉挑战中的高效性。尽管学习曲线陡峭,但对于喜欢数学和数组处理的读者来说,这些语言提供了独特的编程思维方式。同时,一些受访者提到J和APL在数据分析和算法表达上的优势,但也指出它们在维护和团队协作上的局限性。总的来说,学习这些语言可以作为智力挑战,但可能不是提升职业前景的最佳选择。
摘要由CSDN通过智能技术生成

编程语言-有人会建议学习J / K / APL吗?

几个月前,我在解决一些项目欧拉问题时遇到了J / K / APL,至少可以说对此很感兴趣。 对于我生产的每一个外观精美的20行python解决方案,都会有十分之一的时间出现一个让人讨厌的20个字符的J解决方案。 我一直热衷于学习一些基本的J,并且尝试了一些词汇学习,但是发现学习曲线相当陡峭。

对于那些熟悉这些语言的人,您是否建议您花一些时间学习一种语言(特别是我在考虑J)? 为了满足我的好奇心,我会做更多的事情,而不是为了事业发展或诸如此类的事情。

如果您要注意以下一些个人情况:

我喜欢数学,并且每天在工作中使用数学(作为初学者的数学家),但是老实说,我并没有真正受到使用的工具(例如python + NumPy)的限制,所以我不能使用这种借口 。

我没有在金融行业工作的特别渴望,因为这似乎至少是K用户的主要诉求。 另外,我应该真正学习C#作为下一种语言,因为它是我工作的主要语言。 因此,实际上,J几乎绝对不应该成为我学习的下一门语言。

我对MATLAB很熟悉,因此使用基于数组的编程语言不会构成巨大的范式转变。

熟悉这些语言的人的任何建议将不胜感激。

10个解决方案

54 votes

几千年前,我是APL程序员。 所谓“成千上万”,是指上世纪70年代,自定义字符集意味着我们拥有带有APL键盘和字符集的特殊打印终端,以及带有特殊字符的IBM电动打字机等。

我参加了Ken Iverson的关于“为什么APL很酷”的演讲。

他的论文是这样的。 长期以来,除法是一项严肃的数学任务,仅供研究生使用。 诸如重复十进制扩展之类的符号涉及大量数学符号。 曾几何时,甚至需要诸如“负”数字之类的详尽符号。

多年来-随着我们对这些抽象的更好理解-我们为复杂的概念提出了更为紧凑的表示法。

APL(以及J和K)的重点是将大型算法总结为整齐的符号。

如今,我是一名Python程序员。 我发现我早期接触过APL,迫使我问“这是什么意思?”,这使我的大脑扭曲了。 和“这是可重用的操作吗?” 和“所有这些算法绒毛的精妙总结?”

另外,当我继续进行Euler项目问题时,以我的“ APL浸透的回忆”为后盾的Python的“函数式编程精简版”对解决这些练习都非常有帮助。

S.Lott answered 2020-07-12T19:02:40Z

17 votes

J是我用于Euler项目以及在工作中个人使用的主要编程语言。 我从来没有遇到过用于数组处理的更好的语言,默认的编程范式既有用又发人深省。 (实际上,这很有用,因为它令人发人深省。)要达到入门级语言的能力很困难,阅读别人的代码是一项有知识的纪律活动,但是毅力由于语言的强大,灵活和简洁而获得了重大回报。

就是说,我之所以保留它以供个人使用是因为(1)工作中没有其他人使用它,(2)学习曲线足够陡峭,以至于我要求我的同事捡起它是不合理的 ,以及(3)您可以在一行代码中构建复杂的程序,这使得阅读一行代码非常困难,特别是如果您不是自己编写的话。 (我希望至少花半个小时来研究使用十个或更多运算符的代码行,除非以我能完全理解基本原理的方式来使用它们。)

有趣的J功能的一些示例:

1)任何定义为对单个数字进行运算的函数都可以对任意级别的数组进行运算。 例如:

NB. totient(n) = n * \prod_{p|n} (1 - 1/p)

totient=: * -.@%@~.&.q:

NB. Finding the totient of 10

totient 10

NB. Finding the totient of all numbers from 1 to 10

totient"0 (1+i.10)

它的功能完全相同,只是对1xN输入数组的原子(单元素组件)进行操作。 类似地,您可以采用定义为对第二级数组(矩阵)起作用的函数,并仅通过使用“(秩)”联合将其应用于任何更高级别的数组。

2)您可以在J中使用几乎任何理论上可逆的函数,然后通过“向后迭代”将其反转。 例如,

NB. Converts an array of binary digits to a decimal number

(#.) 1 0 1

5

NB. Converts a decimal number to an array of binary digits

(#.^:_1) 5

1 0 1

estanford answered 2020-07-12T19:03:25Z

16 votes

在过去的25年中,我大部分时间都在J和APL工作,可以为您推荐这两者。 当我需要进行任何形式的临时数据分析时,我仍然会选择使用另一种方法,并且我也在Project Euler中使用了它。

如果您对Project Euler感兴趣,那么J绝对是一个不错的选择。 它对无限精度整数和素数的支持使其非常适合。

Duncan answered 2020-07-12T19:03:49Z

13 votes

自1980年以来,我就一直在APL谋生。我希望在以后的几年中继续这样做。 使用APL不仅很有趣,而且该语言还提供了出色的调试功能。 现代的实现是成熟的功能语言,并且也是面向对象的。

这些年来,我遇到了很多人,问我我能继续使用APL多长时间。 那些人是dbase和PL / 1和ALGOL和Pascal和Forth和C和Focus和其他程序员。 得到它了?!

answered 2020-07-12T19:04:14Z

12 votes

J有点像精灵:它需要放在瓶子里。 在J中维护很多批处理软件是一件很痛苦的事情。 在J中维护界面(基于Windows或基于Web,因为是的,您可以设置J来回答Apache以产生Web输出)是一个实验性的,鲜为人知的麻烦。

另一方面,如果您愿意,则使用J可以:解析,筛选,分析,处理等数据,用它来摆弄,找出算法的细粒度或以最短的方式打动互联网 计算一个圆中有多少个三角形,或者什么不适合。

我几乎在我的careers.stackoverflow.com的职业档案中添加J作为交易突破者,但最终我还是把它排除在外了。 对我而言,使用J很好,但是生成J则不行。

编辑:

那是前一段时间。 我仍然对生产中的完整J解决方案(即您的所有MVC)不满意。 自从最初的答复以来,我就在C#项目中将J用作COM,其中为J提供了一个大型矩阵,该矩阵很难用C#进行管理,令人非常满意。

我们的工作之一是使数据模型和代码说话。 要将质量和J的简洁语法联系起来并不容易。 与J不同,一些框架具有易于使用的IDE,并且具有足够的支持以允许它们以人类可读的方式排列代码。 J的über矩阵功能无法弥补其不足。

MPelletier answered 2020-07-12T19:04:57Z

9 votes

我认为您的3点表明您不需要学习J。但是,我认为在任何情况下学习新语言都是有害的。

花时间学习您感兴趣的东西(或任何新语言)总会提高您的其他编程技能。 您将学习解决问题的不同方法,这些方法可以用其他语言来实现。

另外,使用J的最小语法,这是一种很好的语言,可以确保在用另一种语言实现解决方案时获得正确的结果。

Inisheer answered 2020-07-12T19:05:26Z

8 votes

以前,我是APL语言开发人员,使用370汇编程序进行编码。 我将J移植到OS2,但从未学习如何在实际工作中使用它。 我目前正在使用Java和PHP,并且正在评估Python。 在Python教程的前三部分中,我对它与APL的许多相似之处感到震惊,这使我到了这里。

我强烈建议学习APL或J作为一项智力练习。 它将改变您对编程的思考方式(使您的大脑不知所措),并且可能会帮助您进行Python编码。 此外,还有一些针对APL和J程序员的工作,程序员可能比工作少。

answered 2020-07-12T19:05:51Z

7 votes

我曾经在1970年代担任APL程序员几年。 我喜欢这种语言,但是多年没有使用它。

对于某些事情来说,它是一种很棒的语言,但是我真的无法想象将其用于Web开发。

统计和矩阵运算非常有用。 您可以用3个字符解决线性编程问题。 比起以C语言中的页面为例,证明该LP实现的正确性要容易得多。

因此,如果您想为了学习的乐趣而学习它,那我就说吧。 为了提高您的工作前景,很可能还有很多其他的东西要学习,这将给潜在的雇主更多的印象。

JonnyBoats answered 2020-07-12T19:06:25Z

6 votes

这对五十岁左右的我来说是一个有趣的确认。

今天早些时候,我决定隔27年进行一次零编程学习一种新的21世纪编程语言。 我随意选择了Python,担心我们现在生活的基于gui和面向对象的世界。

令我高兴的是,我80年代初期以APL员工的身份谋生的岁月意味着我从字面上浏览内容,并立即理解:)我以为我会分享。

Mani Sitaraman answered 2020-07-12T19:06:54Z

5 votes

是的,学习APL / J / K,它将使您对可能发生的事情有独特的了解。

我指出,@ MPelletier的“一个圆中可以容纳多少个三角形”及其隐含的“ ...但不适用于现实世界中的问题”是有点短视的。 是的,J Software的IDE缺少一些东西,但是构建自己的IDE并不是一个大问题,好的IDE可以掩盖不好的语言(不要嘲笑20到20个字符的缩水。)我一直在做 只要@KaiJaeger拥有APL(如果不是更长的话),我的想法可能就会扭曲,但是我从来不满意使用其他任何东西进行编程。

Randy A MacDonald answered 2020-07-12T19:07:19Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 目标检测的定义 目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。 目标检测任务可分为两个关键的子任务,目标定位和目标分类。首先检测图像中目标的位置(目标定位),然后给出每个目标的具体类别(目标分类)。输出结果是一个边界框(称为Bounding-box,一般形式为(x1,y1,x2,y2),表示框的左上角坐标和右下角坐标),一个置信度分数(Confidence Score),表示边界框中是否包含检测对象的概率和各个类别的概率(首先得到类别概率,经过Softmax可得到类别标签)。 1.1 Two stage方法 目前主流的基于深度学习的目标检测算法主要分为两类:Two stage和One stage。Two stage方法将目标检测过程分为两个阶段。第一个阶段是 Region Proposal 生成阶段,主要用于生成潜在的目标候选框(Bounding-box proposals)。这个阶段通常使用卷积神经网络(CNN)从输入图像中提取特征,然后通过一些技巧(如选择性搜索)来生成候选框。第二个阶段是分类和位置精修阶段,将第一个阶段生成的候选框输入到另一个 CNN 中进行分类,并根据分类结果对候选框的位置进行微调。Two stage 方法的优点是准确度较高,缺点是速度相对较慢。 常见Tow stage目标检测算法有:R-CNN系列、SPPNet等。 1.2 One stage方法 One stage方法直接利用模型提取特征值,并利用这些特征值进行目标的分类和定位,不需要生成Region Proposal。这种方法的优点是速度快,因为省略了Region Proposal生成的过程。One stage方法的缺点是准确度相对较低,因为它没有对潜在的目标进行预先筛选。 常见的One stage目标检测算法有:YOLO系列、SSD系列和RetinaNet等。 2 常见名词解释 2.1 NMS(Non-Maximum Suppression) 目标检测模型一般给出目标的多个预测边界框,对成百上千的预测边界框都进行调整肯定是不可行的,需要对这些结果先进行一个大体的挑选。NMS称为非极大值抑制,作用是从众多预测边界框中挑选出最具代表性的结果,这样可以加快算法效率,其主要流程如下: 设定一个置信度分数阈值,将置信度分数小于阈值的直接过滤掉 将剩下框的置信度分数从大到小排序,选中值最大的框 遍历其余的框,如果和当前框的重叠面积(IOU)大于设定的阈值(一般为0.7),就将框删除(超过设定阈值,认为两个框的里面的物体属于同一个类别) 从未处理的框中继续选一个置信度分数最大的,重复上述过程,直至所有框处理完毕 2.2 IoU(Intersection over Union) 定义了两个边界框的重叠度,当预测边界框和真实边界框差异很小时,或重叠度很大时,表示模型产生的预测边界框很准确。边界框A、B的IOU计算公式为: 2.3 mAP(mean Average Precision) mAP即均值平均精度,是评估目标检测模型效果的最重要指标,这个值介于0到1之间,且越大越好。mAP是AP(Average Precision)的平均值,那么首先需要了解AP的概念。想要了解AP的概念,还要首先了解目标检测中Precision和Recall的概念。 首先我们设置置信度阈值(Confidence Threshold)和IoU阈值(一般设置为0.5,也衡量0.75以及0.9的mAP值): 当一个预测边界框被认为是True Positive(TP)时,需要同时满足下面三个条件: Confidence Score > Confidence Threshold 预测类别匹配真实值(Ground truth)的类别 预测边界框的IoU大于设定的IoU阈值 不满足条件2或条件3,则认为是False Positive(FP)。当对应同一个真值有多个预测结果时,只有最高置信度分数的预测结果被认为是True Positive,其余被认为是False Positive。 Precision和Recall的概念如下图所示: Precision表示TP与预测边界框数量的比值 Recall表示TP与真实边界框数量的比值 改变不同的置信度阈值,可以获得多组Precision和Recall,Recall放X轴,Precision放Y轴,可以画出一个Precision-Recall曲线,简称P-R
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值