我正在使用Clojure中的一个应用程序,它需要繁殖大型矩阵,并且与相同的Numpy版本相比,遇到了一些大的性能问题.Numpy似乎能够在一秒钟内通过其转置乘以1,000,000x23矩阵,而等效的clojure代码需要超过六分钟.(我可以从Numpy打印出结果矩阵,所以它肯定会评估所有内容).
我在这个Clojure代码中做了哪些非常错误的事情?我可以尝试模仿Numpy的一些技巧吗?
这是python:
import numpy as np
def test_my_mult(n):
A = np.random.rand(n*23).reshape(n,23)
At = A.T
t0 = time.time()
res = np.dot(A.T, A)
print time.time() - t0
print np.shape(res)
return res
# Example (returns a 23x23 matrix):
# >>> results = test_my_mult(1000000)
#
# 0.906938076019
# (23, 23)
Run Code Online (Sandbox Code Playgroud)
和clojure:
(defn feature-vec [n]
(map (partial cons 1)
(for [x (range n)]
(take 22 (repeatedly rand)))))
(defn dot-product [x y]
(reduce + (map * x y)))
(defn transpose
"returns the transposition of a …Run Code Online (Sandbox Code Playgroud) 我想问你所有关于Objective C中代码味道的意见,特别是Cocoa Touch.我正在开发一个相当复杂的游戏,即将开始伟大的十二月重构.
我的很多课程,尤其是模型,都充满了处理内部业务逻辑的方法; 在我对抗大量头文件的战争中,我将隐藏在私人类别中.那些私人类别包含大量的声明,这让我感到不安......就像Objective-C一样让我对所有这些方法感到内疚.
我重构的越多(一件好事!),我就越需要保持所有这些重复(不太好).这只是感觉不对.
在像Ruby这样的语言中,社区强调非常简短,清晰,美观的方法.我的问题是,对于Objective C(特别是Cocoa Touch),您的方法有多长,控制器有多大,以及您在项目中找到的每个类的方法数量是多少?是否有任何特别漂亮,漂亮的课程由Objective C中的简短方法组成,或者它根本不是语言文化的重要组成部分?
披露:我正在阅读"The Little Schemer",这应该解释我的悲伤,重新:目标C.
我目前正在重构一些共享一些IBOutlets和IBAction方法的视图控制器.我将插座声明和IBAction方法移动到一个超类中,从子类中删除它们.
现在,当我打开Interface Builder时,我发现我无法看到超类中声明的出口或动作.这些连接仍然存在,因为我在重构之前将它们连接起来,但是它们已经变灰了.(重要的是要注意连接也是工作,因为我的操作在按下按钮时触发,我的插座被正确修改.)
问题是,如何让界面构建器识别来自超类的出口?这是可能的,如果没有,你们都推荐什么?
(只是为了好玩,这是我的超类头文件:)
@interface TFMainViewController : UIViewController {
UIImageView *logoImage, *thinkfunImage;
UIButton *buyFullButton;
}
@property (nonatomic, retain) IBOutlet UIImageView *logoImage, *thinkfunImage;
@property (nonatomic, retain) IBOutlet UIButton *buyFullButton;
-(IBAction) buyFullVersion;
@end
Run Code Online (Sandbox Code Playgroud)
编辑:如果有人想知道,我正在使用Xcode和IB 3.2.5,iOS 4.2 SDK.
我正在org-mode工作并尝试生成一个链接,以引用一个部分的编号,而不是它的标题.
* Section One
:PROPERTIES:
:CUSTOM_ID: sec:one
:END:
* Section Two
#+label: sec:two
I can reference Section One with [[#sec:one]] and [[#sec:one][Section One]],
but I can't get the actual section number (1) to resolve.
Run Code Online (Sandbox Code Playgroud)
我想看看
As you can see in Section 1
Run Code Online (Sandbox Code Playgroud)
写点东西
As you can see in Section [[sec:one]],
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
在MVC Web开发框架(如Ruby on Rails,Django和CakePHP)中,HTTP请求被路由到控制器,控制器获取通常持久存储到后端数据库存储的对象.这些对象代表用户,博客帖子等内容,并且通常在其方法中包含用于权限,获取和/或变异其他对象,验证等的逻辑.
这些框架都非常面向对象.我最近一直在阅读关于函数式编程的内容,它似乎带来了诸如可测试性,简洁性,模块性等巨大的好处.然而,我见过的函数式编程的大多数例子都实现了诸如quicksort或fibonnacci序列之类的琐碎功能,而不是复杂的webapps.我看了几个"功能"的Web框架,他们似乎都很好地实现了视图和控制器,但很大程度上跳过了整个"模型"和"持久性"部分.(我正在谈论更多像Compojure这样的框架,这些框架应该是纯粹的功能,而不是一些方便的似乎使用Scala的OO部分的模型 - 但如果我在这里错了,请纠正我.)
我还没有看到如何使用函数式编程来提供OO编程提供的隐喻,即表映射到对象,以及对象可以提供强大的封装逻辑(如权限和验证)的方法.此外,使用SQL查询来保存数据的整个概念似乎违反了整个"副作用"概念.有人可以解释如何在功能编程的Web框架中实现"模型"层吗?
model-view-controller functional-programming model ruby-on-rails clojure
我希望使用Clojure和Incanter来处理大型科学数据集; 具体而言,该数据集的0.5度版本(仅以二进制格式提供).
我的问题是,你有什么建议可以在Java/Clojure中处理这个问题的优雅方法?有没有一种简单的方法可以将此数据集导入Incanter或其他一些Java矩阵包?
我设法java.nio.ByteBuffer使用以下代码将二进制数据读入:
(defn to-float-array [^String str]
(-> (io/to-byte-array (io/to-file str))
java.nio.ByteBuffer/wrap
(.order java.nio.ByteOrder/LITTLE_ENDIAN)))
Run Code Online (Sandbox Code Playgroud)
现在,我真的在努力学习如何将它ByteBuffer作为一个数组来操作.我一直在使用Python的NumPy,这使得操作这些庞大的数据集非常容易.这是我想要做的python代码:
// reshape row vector into (time, lat_slices, lon_slices)
// then cut out every other row
rain_data = np.fromfile("path/to/file", dtype="f")
rain_data = rain_data.reshape(24, 360, 720);
rain_data = rain_data[0:23:2,:,:];
Run Code Online (Sandbox Code Playgroud)
在此切片之后,我想返回这12个数组的向量.(我需要将它们分别作为未来的功能输入进行操作.)
因此,非常感谢有关如何将此数据集导入Incanter的任何建议.
在第一次配置我的hadoop namenode时,我知道我需要运行
bin/hadoop namenode -format
Run Code Online (Sandbox Code Playgroud)
但是在将数据加载到HDFS之后第二次运行它会消除所有内容并重新格式化.是否有一种简单的方法来判断名称节点是否已被格式化?
嘿所有,我正在寻找一种方法来添加我的Rails应用程序的邀请策略.我正在使用Devise进行身份验证,就像devise_invitable的外观一样,但据我所知,gem只允许您邀请新用户加入系统.
在我的应用程序中,用户可以邀请其他用户(使用电子邮件)加入他当前的项目.如果该电子邮件地址存在,则添加用户; 如果地址不存在,我想向该电子邮件地址发送特定于项目的邀请.如果用户已拥有帐户,则可以登录并将其帐户绑定到该项目.如果没有,她可以创建一个新帐户.
有没有人建议在哪里寻找这样的系统?
嘿所有 - 这个问题具体是关于gender验证,但我有兴趣听听你们是如何处理类似情况的更大的集合(例如国家选择).
我正在开发一个系统,让运动员注册各种活动,目前正在进行良好的性别验证.我的问题是,在许多不同模型上运行相同验证的最佳,最干燥的方法是什么?
比方说,我想验证的性别属性Event和User.validates_each在更新gender属性之前,我可以为该检查值创建一个帮助程序,以包含在["male","female"]的非常短的数组中.但是,如果我想在一个form_for块中访问这个相同的性别数组,比如作为输入collection_select?
我有一个模型工作 - 我声明一个GENDERS常量Event,并有一个短类方法
def self.genders
GENDERS
end
Run Code Online (Sandbox Code Playgroud)
用于表格访问.但是,如果多个模型需要访问,我应该在哪里存储数组?
编辑:一个想法是在应用程序控制器中使用类方法.关于这种方法的合适程度的任何想法都会很棒.
我想知道如何在我的应用程序首次启动时显示UIAlertView或UIView.
谢谢.
我仍在使用Apple的网站上的WebKit教程遇到问题:http: //developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DisplayWebContent/Tasks/MultipleWindows.html
.h文件如下:
#import <Cocoa/Cocoa.h>
#import <WebKit/WebKit.h>
@interface MyDocument : NSDocument
{
IBOutlet id webView;
IBOutlet id textField;
}
- (IBAction)connectURL:(id)sender //Provides me with the error 'Expected ";" before "{" token'
{
[[webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[sender stringValue]]]];
}
@end
Run Code Online (Sandbox Code Playgroud)
你能看到任何有问题的东西吗?为什么它会给我一个问题呢?
- 谢谢!
有没有人有任何关于如何使用java或clojure从二进制文件中读取浮点值的建议?我将我当前的值与Python的NumPy nump.fromfile('path', dtype="f")方法的结果进行比较,而我根本得不到相同的答案.我怀疑这是因为Java的DataInputStream.readFloat()方法假定二进制文件是由java编写的,如本文档所示:
读取四个输入字节并返回一个浮点值.它通过首先以readInt方法的方式构造一个int值,然后将此int值完全按照方法Float.intBitsToFloat的方式转换为float来实现.此方法适用于读取由接口DataOutput的writeFloat方法写入的字节.
所以,我认为java正在向后读取浮点值.前十二个字节是:
(0 -64 121 -60 0 -64 121 -60 0 -64 121 -60)
Run Code Online (Sandbox Code Playgroud)
Clojure/java认为这是重复的1.7676097E-38,而NumPy和Python认为它重复了-999.0.作为参考,我正在使用这个数据集.
有问题的方法(实际上是多态实现的递归搜索方法族)返回指向某种类型对象的指针.在失败的情况下我一直没有回来.现在我想要有两种不同的失败.实现它的最简单方法是什么?