Я совершенно новый для numpy и не могу найти решение. У меня есть 2d список чисел с плавающей запятой в Python, как:Numpy: 2d list min max is slow
list1[0..8][0..2]
Где например:
print(list1[0][0])
> 0.1122233784
Теперь я хочу, чтобы найти минимальное и максимальное значения:
b1 = numpy.array(list1)
list1MinX, list1MinY, list1MinZ = b1.min(axis=0)
list1MaxX, list1MaxY, list1MaxZ = b1.max(axis=0)
мне нужно сделать это примерно миллион раз в цикле.
Он работает правильно, но это примерно в 3 раза медленнее, чем мой предыдущий подход на основе python.
(1:15 мин [NumPy] против 0:25 мин [родной])
Что я делаю неправильно? Я читал, что преобразование списка может быть проблемой, но я не знаю, как это сделать лучше.
EDIT
По просьбе некоторых не-псевдо-код, хотя в моем сценарии список создается по-другому.
import numpy
import random
def moonPositionNow():
#assume we read like from a file, line by line
#nextChunk = readNextLine()
#the file is build like this
#x-coord
#y-coord
#z-coord
#x-coord
#...
#but we don't have that data here, so as a **placeholder** we return a random number
nextChunk = random.random()
return nextChunk
for w in range(1000000):
list1 = [[moonPositionNow() for i in range(3)] for j in range(9)]
b1 = numpy.array(list1)
list1MinX, list1MinY, list1MinZ = b1.min(axis=0)
list1MaxX, list1MaxY, list1MaxZ = b1.max(axis=0)
#Print out results
Хотя создание списка может быть шеей бутылки здесь, я гарантирую исходный код, это не проблема.
EDIT2:
Обновлен пример кода для уточнения, я не нужен Numpy массив случайных чисел.
Почему бы не использовать нативный подход? И могли бы вы предоставить какой-нибудь гибкий тестовый код для нас? – Gullydwarf
Целью использования numpy было ускорение кода. Нативный код довольно оптимизирован, но я думал, что numpy может выжать немного больше. – bortran