在Julia中删除单例尺寸

时间:2018-09-25 19:51:47

标签: julia

只是在玩Julia(1.0),而我需要在Python / numpy / matlab中大量使用的一件事是squeeze函数来降低单例尺寸。

我发现在Julia中执行此操作的一种方法是:

a = rand(3, 3, 1);
a = dropdims(a, dims = tuple(findall(size(a) .== 1)...))

第二行似乎有点麻烦,并且不容易立即阅读和解析(这也可能是我从其他语言带来的偏见)。但是,我想知道这是否是在Julia中执行此操作的规范方法吗?

4 个答案:

答案 0 :(得分:8)

这个问题的实际答案使我感到惊讶。您的要求可以改写为:

  

为什么[8520:11412:0926/001704.487:ERROR:install_util.cc(603)] Failed to read HKLM\SOFTWARE\Policies\Google\Chrome\MachineLevelUserCloudPolicyEnrollmentToken: The system cannot find the file specified. (0x2) DevTools listening on ws://127.0.0.1:59340/devtools/browser/bc325d32-310c-43e6-b8cf-dcfceaebf5a5 ['javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);'] Traceback (most recent call last): File "code/main.py", line 17, in <module> import urls.eastleigh File "C:\Users\Goten\Anaconda3\code\urls\eastleigh.py", line 61, in <module> driver.get(link) File "C:\Users\Goten\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 332, in get self.execute(Command.GET, {'url': url}) File "C:\Users\Goten\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 320, in execute self.error_handler.check_response(response) File "C:\Users\Goten\Anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: unknown error: unsupported protocol (Session info: chrome=68.0.3440.106) (Driver info: chromedriver=2.41.578737 (49da6702b16031c40d63e5618de03a32ff6c197e),platform=Windows NT 10.0.17134 x86_64) 不删除所有单例尺寸?

我在这里引用relevant issue的Tim Holy:

  

不可能让squeeze(A)返回编译器的类型   可以推断-输入矩阵的大小是运行时变量,因此   编译器无法知道输出有多少维   将有。因此,它可能无法为您提供所需的类型稳定性。

除了类型稳定性之外,您编写的内容还具有其他一些令人惊讶的含义。例如,请注意:

dropdims(a)

总而言之,在julia> f(a) = dropdims(a, dims = tuple(findall(size(a) .== 1)...)) f (generic function with 1 method) julia> f(rand(1,1,1)) 0-dimensional Array{Float64,0}: 0.9939103383167442 中包含这样的方法,Julia会鼓励用户使用它,从而导致潜在的类型不稳定的代码,在某些情况下,它并不会很快(某些核心开发人员正在努力尝试避免)。在像Python这样的语言中,没有严格的类型稳定性,因此您会找到此类功能。

当然,没有什么可以阻止您定义自己的方法。而且我认为您不会找到一种更简单的编写方法。例如,未实现的Base命题是方法:

Base

只要知道使用它的潜在含义即可。

答案 1 :(得分:3)

让我简单地补充一下,“不受控制的” dropdims(删除任何单例维)是错误的常见来源。例如,假设您有一个循环,该循环从某个外部源请求数据数组A,然后在其上运行R = sum(A, dims=2),然后摆脱所有单例尺寸。但是,假设您的外部来源中有10,000次返回A,而size(A, 1)恰好是1:繁荣,您突然丢掉了比预期更多的尺寸,并且可能有严重误解的风险您的数据。

如果您改为手动指定这些尺寸(例如dropdims(R, dims=2)),则可以避免此类错误。

答案 2 :(得分:2)

您可以摆脱tuple,而使用逗号,

dropdims(a, dims = (findall(size(a) .== 1)...,))

答案 3 :(得分:0)

我对科林的启示感到惊讶;肯定依靠“重塑”的东西是类型稳定的吗? (另外,作为奖励,返回视图而不是副本)。

<beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
            destroy-method="close">
    <beans:property name="driverClassName" value="org.postgresql.Driver"/>
    <beans:property name="url"
                    value="WHAT_SHOULD_I_ADD_HERE"/>
    <beans:property name="username" value="USERNAME"/>
    <beans:property name="password" value="PASSWORD"/>
    <beans:property name="removeAbandoned" value="true"/>
    <beans:property name="removeAbandonedTimeout" value="20"/>
    <beans:property name="defaultAutoCommit" value="false"/>
</beans:bean>

<!-- Hibernate 4 SessionFactory Bean definition -->
<beans:bean id="hibernate4AnnotatedSessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <beans:property name="dataSource" ref="dataSource"/>
    <beans:property name="packagesToScan" value="com.myapp.spring.model" />

    <beans:property name="hibernateProperties">
        <beans:props>
            <beans:prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQL9Dialect</beans:prop>
            <beans:prop key="hibernate.show_sql">false</beans:prop>
            <beans:prop key="hibernate.hbm2ddl.auto">update</beans:prop>
        </beans:props>
    </beans:property>
</beans:bean>

不?