如何在 Julia 中定义指向变量或列表元素的指针?我曾尝试阅读一些资源,但我对在 Julia 中使用指针感到非常困惑。
我想将对象数组传递给函数,并返回另一个相同大小的数组。我该怎么办?代码应该是如此之快。例如,考虑以下代码:
struct triangle
height::Float64
base::Float64
end
function area(height::Float64, base::Float64)
return 0.5*base*height
end
Run Code Online (Sandbox Code Playgroud)
我想定义一个函数,该函数返回三角形数组的面积。最快的方法是什么?
我写了一个函数,它生成一个离散随机变量并返回两个索引。似乎我的代码是错误的,因为返回的第一个索引总是 4。这是我的代码:
function inds(arr::Array{Float64, 2})
probs = arr/sum(arr)
u = rand()
sum_prob = 0.0
local ii, jj
for i=1:size(arr)[1]
for j=1:size(arr)[2]
if sum_prob <= u < sum_prob + probs[i,j]
ii = i
jj = j
break
else
sum_prob += probs[i,j]
end
end
end
return (ii, jj, probs[ii,jj])
end
Run Code Online (Sandbox Code Playgroud) 我定义了两个结构和一个像这样的函数
struct A
x::Float64
end
struct B
y::Float64
end
f(a::A, b::B) = a.x*sin(b.y)
f.([A(0.1), A(0.2)], [B(1.), B(2.), B(3.)])
Run Code Online (Sandbox Code Playgroud)
但是f返回此错误:
DimensionMismatch(“无法将数组广播为相同大小”)
我该如何解决这个错误?我希望有6个元素的数组作为函数输出。
我已经更改了帖子,并发布了我的整个代码!有人可以告诉我如何优化它吗?
import Base: *, +, -, /, ^
using Images
const ? = convert(Float64, ?)
#define vector
mutable struct Vec3
x::Float64
y::Float64
z::Float64
end
function +(u::Vec3, v::Vec3)
Vec3(u.x+v.x, u.y+v.y, u.z+v.z)
end
function -(u::Vec3, v::Vec3)
Vec3(u.x-v.x, u.y-v.y, u.z-v.z)
end
function /(u::Vec3, v::Float64)
Vec3(u.x/v, u.y/v, u.z/v)
end
function *(u, v::Vec3)
if typeof(u) == Float64
Vec3(u*v.x, u*v.y, u*v.z)
elseif typeof(u) == Vec3
Vec3(u.x*v.x, u.y*v.y, u.z*v.z)
end
end
function ^(u::Vec3, v::Float64)
Vec3(u.x^v, u.y^v, u.z^v)
end
function dot(u::Vec3, v::Vec3)
u.x*v.x + u.y*v.y + u.z*v.z
end …Run Code Online (Sandbox Code Playgroud) 我正在尝试在julia中同时运行两个功能,但我不知道该怎么做。在这里您可以看到我的代码:
function area(side::Float64)
return side*side
end
function f(n::Int64)
mat = zeros(n,n)
for i=1:n
for j=1:n
mat[i,j] = area(rand())
end
end
return mat
end
function g(n::Int64)
mat = zeros(n,n)
for i=1:n
for j=1:n
mat[i,j] = area(rand()*rand())
end
end
return mat
end
s1 = f(10)
s2 = g(10)
hcat(s1,s2)
Run Code Online (Sandbox Code Playgroud) julia中是否有将2D数组转换为1D数组的函数?例如,我知道如何通过定义函数来实现该功能,但是我不想每次都编写它。
function flatten(Mat)
n, m = size(Mat)
flattened = zeros(m*n)
for i=1:n
for j=1:m
flattened[(i-1)*m + j] = Mat[i,j]
end
end
return flattened
end
Run Code Online (Sandbox Code Playgroud) 我正在尝试定义类似矩阵的结构。我应该如何定义它们?例如,定义这样的矩阵:
struct Mat
r11::Float64
r12::Float64
r21::Float64
r22::Float64
end
Run Code Online (Sandbox Code Playgroud)
但是,当矩阵很大时,就不能这样写。添加,减去等后,我应如何定义多维矩阵以提高存储效率并提高存储效率。
如果我们有一些结构,那么使用多个调度就不是问题。但是,当我们有这么多结构时,如何使用多个调度?例如,我们有N个这样的结构:
struct An
a::Float64
end
Run Code Online (Sandbox Code Playgroud)
和类似的功能:
f!(a::Ai) = exp(Ai.a)
Run Code Online (Sandbox Code Playgroud)
当N大时,将是头痛的。考虑到此功能简单易用!功能可能是如此之大!