小编Cho*_*ang的帖子

为什么朱莉娅以这种复杂的方式表达这种表达?

我按照朱莉娅的文件:

julia> :(a in (1,2,3))
:($(Expr(:in, :a, :((1,2,3)))))
Run Code Online (Sandbox Code Playgroud)

那么:(a in (1,2,3))==:($(Expr(:in, :a, :((1,2,3))))),为什么朱莉娅以这种方式表达这个表达?究竟是$什么意思?在我看来,$只是评估全局范围中的下一个表达式.我发现文档对此不清楚.

julia

7
推荐指数
2
解决办法
179
查看次数

numpy中矢量化后的性能损失

我正在写一个耗时的程序.为了减少时间,我尽力使用numpy.dot而不是for循环.

但是,我发现矢量化程序的性能比for循环版本差得多:

import numpy as np
import datetime
kpt_list = np.zeros((10000,20),dtype='float')
rpt_list = np.zeros((1000,20),dtype='float')
h_r = np.zeros((20,20,1000),dtype='complex')
r_ndegen = np.zeros(1000,dtype='float')
r_ndegen.fill(1)
# setup completed
# this is a the vectorized version
r_ndegen_tile = np.tile(r_ndegen.reshape(1000, 1), 10000)
start = datetime.datetime.now()
phase = np.exp(1j * np.dot(rpt_list, kpt_list.T))/r_ndegen_tile
kpt_data_1 = h_r.dot(phase)
end = datetime.datetime.now()
print((end-start).total_seconds())
# the result is 19.302483
# this is the for loop version
kpt_data_2 = np.zeros((20, 20, 10000), dtype='complex')
start = datetime.datetime.now()
for i in …
Run Code Online (Sandbox Code Playgroud)

python performance numpy linear-algebra vectorization

6
推荐指数
1
解决办法
278
查看次数

如何在julia中启动列表元素列表?

我想在朱莉娅列出一份清单.它应该是这样的:

a = [1,"char", [1, 2, 3]]
a[3]
# ouput should be [1,2,3]
Run Code Online (Sandbox Code Playgroud)

但是,朱莉娅会自动进行连接,所以它最终会被连接起来 [1, "char", 1, 2, 3]

如何在julia中执行此类操作而不使用其他值启动列表,然后为其分配列表,如:

a = [1, "char", 3]
a[3] = [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

arrays julia

3
推荐指数
1
解决办法
69
查看次数

f2py:输入不是fortran连续的

我用f2py包装了一些fortran代码.这是fortran代码:

MODULE iteration
implicit none
contains

SUBROUTINE iterate(alpha, beta, e, es, rank, omega, smearing, prec, max_step)
    REAL(kind=8), INTENT(in) :: omega, smearing, prec
    INTEGER :: max_step, step, rank, cnt
    COMPLEX(kind=16) :: alpha(rank,rank), beta(rank,rank), omega_mat(rank, rank), green(rank, rank)
    COMPLEX(kind=16), INTENT(inout) ::  e(rank,rank), es(rank,rank)
    step = 0
    omega_mat = 0
    DO cnt=1, rank
        omega_mat(cnt, cnt) = 1.0
    ENDDO
    omega_mat = omega_mat * (omega + (0.0, 1.0) * smearing)
    DO WHILE (minval(abs(alpha)) .gt. prec .or.  minval(abs(beta)) .gt. prec .and. step .lt. max_step)
        green = …
Run Code Online (Sandbox Code Playgroud)

python fortran numpy f2py

3
推荐指数
1
解决办法
1428
查看次数