在Python中,通常建议对代码进行向量化以使计算更快。例如,如果您想计算两个向量的内积,例如a和b,通常
代码A
c = np.dot(a, b)
Run Code Online (Sandbox Code Playgroud)
比
代码B
c = 0
for i in range(len(a)):
c += a[i] * b[i]
Run Code Online (Sandbox Code Playgroud)
但在 Julia 中,有时矢量化似乎没有那么有帮助。我将'*和dot视为矢量化版本,并将显式for循环视为非矢量化版本,并得到以下结果。
using Random
using LinearAlgebra
len = 1000000
rng1 = MersenneTwister(1234)
a = rand(rng1, len)
rng2 = MersenneTwister(12345)
b = rand(rng2, len)
function inner_product(a, b)
result = 0
for i in 1: length(a)
result += a[i] * b[i]
end
return result
end
@time a' * b
@time dot(a, …Run Code Online (Sandbox Code Playgroud) Python 中有一个类似的问题,但我问的是 Julia 版本。
我有一个 shape 的多维数组img = (3, 64, 64),它表示第一维为 RGB 的图像。我想用来plt.imshow(img)在 Jupyter Notebook 中显示图像,但plt.imshow采用形状为 的数组(64, 64, 3)。所以,
是否有任何内置函数可以img 在不改变像素顺序的情况下进行转换?
注意:reshape(img, (64, 64, 3))不起作用。我已经尝试过了,但没有得到原始图像。
我写了一个嵌套for循环来说明我想要的:
# Suppose img has been created
img_reshaped = zeros(size(img)[2], size(img)[3], size(img)[1])
for i in 1: size(img)[2]
for j in 1: size(img)[3]
for k in 1: size(img)[1]
img_reshaped[i,j,k] = img[k,j,i]
end
end
end
plt.imshow(test_img)
Run Code Online (Sandbox Code Playgroud)
上面的循环for给出
同时reshape(img, (64, …