Numpy: Permintaan fitur: Tambahkan ke fungsi sederhana numpy untuk mengubah sistem koordinat

Dibuat pada 24 Okt 2014  ·  14Komentar  ·  Sumber: numpy/numpy

Akan lebih mudah untuk memiliki fungsi-fungsi ini sebagai bagian dari rutinitas matematika numpy.

cart2pol -- Transformasikan Cartesian ke koordinat kutub

def cart2pol(x, y):
    theta = np.arctan2(y, x)
    rho = np.hypot(x, y)
    return theta, rho

pol2cart -- Transformasikan kutub ke koordinat Cartesian

def pol2cart(theta, rho):
    x = rho * np.cos(theta)
    y = rho * np.sin(theta)
    return x, y

cart2sph -- Ubah Cartesian menjadi koordinat bola

def cart2sph(x, y, z):
    hxy = np.hypot(x, y)
    r = np.hypot(hxy, z)
    el = np.arctan2(z, hxy)
    az = np.arctan2(y, x)
    return az, el, r

sph2cart -- Transformasikan bola ke koordinat Cartesian

def sph2cart(az, el, r):
    rcos_theta = r * np.cos(el)
    x = rcos_theta * np.cos(az)
    y = rcos_theta * np.sin(az)
    z = r * np.sin(el)
    return x, y, z
01 - Enhancement numpy.lib

Komentar yang paling membantu

Saya mengerti apa yang Anda bicarakan. Namun, fungsi-fungsi ini sangat sering digunakan saat bekerja dengan sistem koordinat dalam algoritme geometris, perangkat lunak grafik komputer, dll. Generalisasi pada dimensi-n jarang diperlukan. Di MATLAB fungsi-fungsi ini ada dan, saya harus mengatakan, mereka agak nyaman. Saya menganggap fungsi-fungsi ini sebagai rutinitas matematika sederhana, misalnya, fungsi rad2deg dan deg2rad. Fungsi-fungsi ini, seperti yang Anda ketahui, adalah fungsi yang sering digunakan dan ada di numpy.

Semua 14 komentar

Saya tidak yakin ini adalah sesuatu yang perlu di numpy, fungsinya cukup sederhana untuk mengimplementasikan diri Anda secara optimal.
Jika kita menambahkannya, apakah kita menarik garis transformasi mana yang akan ditambahkan? ada jumlah yang tak terbatas dari mereka.

Bahkan jika kita menggambar garis hanya pada transformasi bola, ada sejumlah konvensi berbeda yang tidak direpresentasikan di sini. Saya percaya bahwa fungsi-fungsi ini lebih sesuai untuk paket yang benar-benar menggunakannya secara internal (misalnya astropi) dan mengikuti konvensi tertentu melalui kodenya.

Saya mengerti apa yang Anda bicarakan. Namun, fungsi-fungsi ini sangat sering digunakan saat bekerja dengan sistem koordinat dalam algoritme geometris, perangkat lunak grafik komputer, dll. Generalisasi pada dimensi-n jarang diperlukan. Di MATLAB fungsi-fungsi ini ada dan, saya harus mengatakan, mereka agak nyaman. Saya menganggap fungsi-fungsi ini sebagai rutinitas matematika sederhana, misalnya, fungsi rad2deg dan deg2rad. Fungsi-fungsi ini, seperti yang Anda ketahui, adalah fungsi yang sering digunakan dan ada di numpy.

Sebagai aturan umum pasti ada tempat di numpy untuk utilitas dasar
hal-hal. Jelas ada pertanyaan tentang di mana tepatnya untuk menarik garis,
tapi kami melakukan dan harus menyertakan setidaknya beberapa hal seperti ini. (Sebagai ekstrim
contoh, mengapa kita mengekspor np.pi? Ini sepele bagi pengguna untuk mengimplementasikan kembali jika
mereka membutuhkannya ... tetapi memaksa mereka untuk melakukannya akan menjadi pemborosan yang mengganggu
waktu mereka.)

Jadi jika kita akan menggambar garis, kita harus benar-benar melakukannya berdasarkan beberapa
prinsip IMO.

Beberapa kriteria potensial yang perlu dipertimbangkan untuk jenis pembantu sederhana ini:

  • apakah mereka menangani kelas pengguna yang luas?
  • apakah pengguna ini menggunakan kumpulan konvensi yang sama?
  • apakah hanya ada satu api yang jelas?
  • apakah hanya ada satu implementasi yang optimal?
  • apakah ada gangguan fiddly dalam mencapai optimal ini?
    penerapan? (Perhatikan bahwa pol2cart OP membuat salinan yang tidak perlu.)
  • apakah mereka akan menjadi beban pemeliharaan berkelanjutan bagi kita? (Ini agak
    superset dari beberapa poin di atas.)

Saya pikir fungsi-fungsi ini mendapat skor cukup baik pada kriteria ini. Semua orang menggunakan
koordinat kutub terkadang, tidak ada yang akan mengeluh bahwa kami menerapkan
mereka salah, memeriksa ulang formula setiap kali Anda membutuhkannya adalah
buang-buang waktu yang mengganggu, dll.

Satu hal yang saya tidak yakin adalah apakah semua orang menggunakan konvensi yang sama
untuk pemetaan antara koordinat bola dan Cartesian - ada yang tahu?
Saya bisa membayangkan komunitas yang berbeda memiliki konvensi tanda yang berbeda atau
apa pun, dan saya sendiri hampir tidak menggunakannya.
Pada 24 Okt 2014 21:04, "Evgeny Prilepin" [email protected] menulis:

Saya mengerti apa yang Anda bicarakan. Namun, fungsi-fungsi ini digunakan
sangat sering saat bekerja dengan sistem koordinat dalam geometrik
algoritme, perangkat lunak grafik komputer, dll. Generalisasi pada dimensi-n
diperlukan jarang. Di MATLAB fungsi-fungsi ini ada
http://www.mathworks.com/help/matlab/cartesian-coordinate-system-conversion.html
dan, saya harus mengatakan, mereka agak nyaman. Saya mempertimbangkan fungsi-fungsi ini
sebagai rutinitas matematika sederhana, misalnya, fungsi rad2deg dan
deg2rad. Fungsi-fungsi ini, seperti yang Anda ketahui, adalah fungsi yang sering digunakan dan
ada
http://docs.scipy.org/doc/numpy/reference/generated/numpy.rad2deg.html#numpy.rad2deg
di numpy.


Balas email ini secara langsung atau lihat di GitHub
https://github.com/numpy/numpy/issues/5228#issuecomment -60441622.

Sayangnya, memang ada beberapa konvensi yang digunakan untuk menangani koordinat bola: http://en.wikipedia.org/wiki/Spherical_coordinate_system

Saya pikir lebih baik membiarkan pengguna menentukan transformasi koordinat bola tertentu yang mereka inginkan sendiri.

Ada juga standar ISO yang menentukan apa format "yang tepat" itu... Saya tidak berpikir bahwa banyak konvensi benar-benar menjadi masalah, selama apa yang dikembalikan didokumentasikan dengan jelas: beralih dari satu konvensi ke konvensi lainnya jauh lebih mudah daripada mengubah koordinat kartesius ke salah satu sistem koordinat bola yang mungkin.

Di sisi lain, saya tidak melihat ini pas di numpy sebagai beberapa fungsi mandiri. Koordinat kutub, terutama yang terkait dengan bilangan kompleks, mungkin, tetapi koordinat bola, tidak juga.

Yah, saya agak cenderung setuju dengan Anda. Mari kita tidak membahas fungsi koordinat bola sekarang. Namun, fungsi koordinat kutub dapat diterapkan dalam banyak kasus.

Ada 5 norma berbeda yang diterapkan di np.linalg.norm ? Saya tidak mengerti mengapa tidak mungkin untuk menambahkan beberapa transformasi koordinat. Bahkan jika dilakukan tanpa opsi, saya rasa tidak ada diskusi serius tentang validitas kegunaan dari x,y -> r*cos(theta),sin(theta) sederhana dan kebalikannya. Saya akan terkejut jika ini bukan transformasi koordinat yang paling banyak digunakan dan lurus ke depan di dunia.

Di sisi lain, saya tidak melihat ini pas di numpy sebagai beberapa fungsi mandiri. Koordinat kutub, terutama yang terkait dengan bilangan kompleks, mungkin, tetapi koordinat bola, tidak juga.

Setuju dengan ini. Kebanyakan orang tampaknya netral ke positif untuk menambahkan transformasi koordinat kutub. Jadi kalau ada yang ingin membuat proposal yang konkrit dan kemudian mengimplementasikannya, saya rasa dipersilakan.

Beberapa pemikiran lain:

  • Bahkan untuk kutub, ada beberapa konvensi yang perlu didokumentasikan dengan jelas (sudut dalam derajat atau radian, dan dalam interval [0, 2pi) atau [-pi, pi) ). Saya mungkin lebih suka [-pi, pi) .
  • Kami mungkin mempertimbangkan untuk menempatkan fungsi di ruang nama numpy.lib alih-alih numpy tingkat atas.

Menemukan ini saat kami mendiskusikan percepatan transformasi koordinat dalam astropi (https://github.com/astropy/astropy/pull/5735) dan saya bertanya-tanya apa yang terjadi dengan sincos (#2626) dan "eksponen hanya bilangan imajiner" (#5625).

Satu saran mungkin untuk memulai dengan mengikuti cmath [1] dan memperkenalkan np.rect dan np.polar , dan bekerja dari itu (saat ini, kami membahas semua kecuali dua ini dan np.phase dari cmath ).

[1] https://docs.python.org/3.5/library/cmath.html#conversions -to-and-from-polar-coordinates

Versi 3D dari helper ini juga akan membantu.

Halo, saya baru di sini dan karena saya belajar mendalam, saya punya pertanyaan ini.
Saya menggunakan tensorflow untuk mendeteksi objek dengan USB HD Camera yang tidak bergerak.
Saya mendapatkan koordinat pusat objek dan saya ingin robot menuju ke koordinat tersebut, konversi mana yang harus saya gunakan untuk tujuan ini?
Pada robot saya menggunakan koordinat XYZ yaitu Cartesian per manual. Tidak yakin koordinat apa yang saya dapatkan dari tensorflow, cartesian, pixel atau apa?

Terima kasih

@fdkssdks Tempat yang salah untuk mengajukan pertanyaan itu, coba stackoverflow.

Atau di sini: Dokumentasi API Tensorflow .

Apakah halaman ini membantu?
0 / 5 - 0 peringkat