numpy, scipy 또는 pylab을 이용한 골프 팁


10

파이썬에 대한 팁의 포괄적 인 목록이 이미있어 여기가 내가 무엇을 요구하고있어 특히 사용에 적용되는 팁, 그래서 numpy, scipy또는 pylab라이브러리를.

이것들은 이미 사용중인 코드를 줄이는 방법 numpy이거나 이러한 라이브러리를 사용하여 일반적인 파이썬 작업을 줄이는 방법입니다.

답변 당 하나의 팁을 부탁드립니다.


참고 pylab그냥 matplotlib.pyplot+ numpy사용되지 않는 일반적인 네임 스페이스에. 수입품이 같은 바이트 수를 가지고 있다는 점에서 의 numpy일부 pylab는 사소한 것이므로 플로팅 물건 만 추가로 올 수 pylab있지만 질문과 관련하여 생각한 것이 아니라고 생각합니다.
Andras Deak

2
@AndrasDeak, pylab을 사용하는 것은 나쁜 습관으로 간주되지만 codegolf에서는 거의 모범 사례로 간주 될 수 없음을 알고 있습니다. Pylab은 많은 numpy패키지의 일부를 직접 포함 합니다. 예를 들어 pylab.randintnumpy가 필요한 곳에 유효합니다 numpy.random.randint. 따라서 골프를 pylab위해서는 더 짧은 코드를 제공해야합니다.
user2699

1
지원 중단이 문제가되지 않는다는 것을 알고 있습니다. 나는 하위 패키지가 pylab 네임 스페이스에로드되었다는 것을 깨닫지 못했습니다! 죄송합니다, 당신은 완벽하게 옳습니다 :)
Andras Deak

답변:


5

Numpy의 방송 활용

브로드 캐스팅은 다른 배열의 크기와 일치하도록 일부 단일 차원을 따라 다차원 배열을 복제하는 것을 의미합니다. 이것은 산술 연산자가 적용되면 Numpy 배열에 대해 자동으로 발생합니다.

예를 들어 10 × 10 곱셈표를 생성하려면

import numpy
t=numpy.arange(1,11)
print(t*t[:,None]) # Or replace t[:,None] by [*zip(t)]

온라인으로 사용해보십시오!

여기 tNumpy 배열로 생성됩니다 [1, 2, ..., 10]. 모양은 (10,)이며, 이는 (1,10)과 같습니다. 다른 피연산자 배열의 t[:,None]크기는 (10,1)입니다. 두 배열을 곱하면 암시 적으로 복제되므로 두 모양이 모두 모양 (10,10) 인 것처럼 동작합니다. 모양 (10,10)도있는 결과에는 원래 배열의 모든 항목 쌍에 대한 제품이 포함됩니다.


그것은 zip방송에서 영리하게 사용되었는데, 그 자체의 대답으로 나올 것입니까?
user2699

@ user2699 [*zip(t)]더 읽기 쉬운 바이트 수를 가지고 있기 때문에 별도의 답변을 할 가치가 없다고 생각합니다 t[:,None]. 그러나 당신은 옳습니다. 주목할 가치가 있습니다. 그래서 여기에 다시 추가했습니다.
Luis Mendo

좋은 점은 실제로 바이트 수를 계산하지 않은 것 같습니다. [*zip(t)]더 많은 차원이 있으면 2 바이트가 더 짧아집니다.
user2699

1
확장 가능한 iterable unpacking은 [*zip(t)]파이썬 3에서만 작동합니다.
Andras Deak

나는 Perl 6이 가지고 있지 않은 numpy가 무엇인지 알아 내고자이 페이지를 보았다. 어쨌든 쓰여지 my \t = 1..10; .fmt('%3d').put for t «*» t[*,Empty]거나 사용할 수있는zip(t)
Brad Gilbert b2gills

2

range (...) 대신 r _ [...] 사용

Numpy는를 사용하여 배열을 만들기위한 matlab과 같은 구문을 제공합니다 r_[...]. 대괄호 사이의 슬라이스 표기법은 범위가 표시된 배열로 해석됩니다. 예를 들어

r_[:30:4]

에 해당

arange(0,30,4)

대부분의 용도로 대체 할 수 있습니다

range(0,30 4)

보다 복잡한 표현도 처리 할 수 ​​있습니다. 예를 들어 인덱스를 0에서 10까지 가져오고 다시 아래로 내리려면

r_[:10,10:-1:-1]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.