numpy 배열을 통해 반복
이것보다 덜 장황한 대안이 있습니까?
for x in xrange(array.shape[0]):
for y in xrange(array.shape[1]):
do_stuff(x, y)
제가 생각해낸 것은 다음과 같습니다.
for x, y in itertools.product(map(xrange, array.shape)):
do_stuff(x, y)
하나의 움푹 패인 자국을 구하긴 했지만, 여전히 꽤나 추악합니다.
저는 이 가짜 코드처럼 보이는 무언가를 바라고 있습니다.
for x, y in array.indices:
do_stuff(x, y)
그런 것이 존재합니까?
제 생각에 당신은 숫자를 찾고 있는 것 같습니다.
>>> a =numpy.array([[1,2],[3,4],[5,6]])
>>> for (x,y), value in numpy.ndenumerate(a):
... print x,y
...
0 0
0 1
1 0
1 1
2 0
2 1
공연에 관해서요.그것은 목록 이해보다 조금 느립니다.
X = np.zeros((100, 100, 100))
%timeit list([((i,j,k), X[i,j,k]) for i in range(X.shape[0]) for j in range(X.shape[1]) for k in range(X.shape[2])])
1 loop, best of 3: 376 ms per loop
%timeit list(np.ndenumerate(X))
1 loop, best of 3: 570 ms per loop
성능에 대해 걱정하는 경우 다음과 같은 기능을 구현하는 방법을 검토하여 좀 더 최적화할 수 있습니다.ndenumerate
배열로 변환하고 루프하는 두 가지 일을 합니다.어레이가 있다는 것을 알고 있는 경우, 다음을 호출할 수 있습니다..coords
플랫 반복기의 속성입니다.
a = X.flat
%timeit list([(a.coords, x) for x in a.flat])
1 loop, best of 3: 305 ms per loop
인덱스만 필요한 경우 다음을 시도할 수 있습니다.
>>> a = numpy.arange(9).reshape(3, 3)
>>> [(x, y) for x, y in numpy.ndindex(a.shape)]
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
import numpy as np
Y = np.array([3,4,5,6])
for y in np.nditer(Y, op_flags=['readwrite']):
y += 3
Y == np.array([6, 7, 8, 9])
y = 3
작동하지 않음, 사용y *= 0
그리고.y += 3
대신.
numpy.nditer()를 사용하기 위한 좋은 설명이 여기에 없습니다.그래서, 저는 하나로 갈 것입니다.NumPy v1.21 dev0 설명서에 따르면, NumPy 1.6에 도입된 반복기 개체 엔디터는 하나 이상의 어레이의 모든 요소를 체계적인 방식으로 방문할 수 있는 많은 유연한 방법을 제공합니다.
mean_squared_error를 계산해야 하며 이미 y_predicted를 계산했으며 sklearn에서 사용할 수 있는 보스턴 데이터 세트의 y_actual을 가지고 있습니다.
def cal_mse(y_actual, y_predicted):
""" this function will return mean squared error
args:
y_actual (ndarray): np array containing target variable
y_predicted (ndarray): np array containing predictions from DecisionTreeRegressor
returns:
mse (integer)
"""
sq_error = 0
for i in np.nditer(np.arange(y_pred.shape[0])):
sq_error += (y_actual[i] - y_predicted[i])**2
mse = 1/y_actual.shape[0] * sq_error
return mse
이것이 도움이 되기를 바랍니다 :).자세한 설명을 위해 방문.
언급URL : https://stackoverflow.com/questions/6967463/iterating-over-a-numpy-array
'programing' 카테고리의 다른 글
스프링 부츠 플라이웨이예외:데이터베이스에 연결할 수 없습니다.URL, 사용자 및 암호 구성 (0) | 2023.07.17 |
---|---|
Excel VBA 매크로에서 UTC의 현재 날짜 시간을 가져오는 방법 (0) | 2023.07.17 |
두 하위 플롯이 생성된 후 x축을 공유하는 방법 (0) | 2023.07.17 |
드롭다운 목록 워드프레스에 상위 & 1단계 아동 범주 표시 (0) | 2023.07.12 |
PyCharm에서 환경 변수를 설정하는 방법은 무엇입니까? (0) | 2023.07.12 |