Pergunta

Vamos supor que tenhamos um vetor como

x = -1:0.05:1;
ids = randperm(length(x));
x = x(ids(1:20));

Eu gostaria de calcular a distância máxima entre os elementos de x De alguma maneira idiomática. Seria fácil apenas iterar em todas as combinações possíveis de xOs elementos, mas sinto que poderia haver uma maneira de fazê-lo com as funções internas do Matlab de uma maneira louca, mas idiomática.

Foi útil?

Solução

A respeito

max_dist = max(x) - min(x)

?

Outras dicas

Você quer dizer a diferença entre os elementos maiores e os menores do seu vetor? Se você fizer, algo assim funcionará:

max(x) - min(x)

Se não, então eu entendi mal a pergunta.

Este é um cálculo de distância entre pontos, embora simples, já que você está trabalhando em uma dimensão. Realmente, esse ponto que cai a uma distância máxima em uma dimensão é sempre um dos dois pontos possíveis. Portanto, tudo o que você precisa fazer é pegar o valor mínimo e o valor máximo da lista, e veja o que está mais longe do ponto em questão. Portanto, assumindo que os números em x são números reais, isso funcionará:

xmin = min(x);
xmax = max(x);
maxdistance = max(x - xmin,xmax - x);

Como alternativa, há algum tempo eu coloquei uma ferramenta geral de computação de distância interpoint na troca de arquivos (IPDM). É inteligente o suficiente para problemas especiais simples, como o problema de ponto mais distante. Esta chamada faria isso por você:

D = ipdm(x,'subset','farthest','result','struct');

Obviamente, não será tão eficiente quanto o código simples que escrevi acima, pois é uma ferramenta totalmente geral.

Uhh ... adoraria ter um Matlab em minhas mãos e ainda é de manhã cedo, mas que tal algo como:

max_dist = max(x(2:end) - x(1:end-1));

Não sei se é isso que você está procurando.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top