質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

1回答

400閲覧

pythonメモリ使用量

junsuke16

総合スコア14

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2017/07/11 23:06

編集2017/07/11 23:18

パイソンの2.7、64BITでnumpyの演算を行ったところ、やたら時間(2000秒)がかかりました。演算時のパソコン内のメモリを確認したところ、16GBあるところ、9GBの使用(うちバックグラウンドで5GB使用していたのでパイソン自体は4GB程度)で止まっていました。16GBあるので、更に使用した方が早くなると思うのですが、どのようにすれば、パイソンに使用するメモリを上げることができるでしょうか?それとも、メモリは関係なく、演算が遅かったのでしょうか?確認したところ、演算で遅いところは、
np.linalg.eigvalsh
の演算で、巨大な行列の固有値を求めるところでした。
何か解決策があれば教えてください。
import numpy as np
print "Finished Importing Numpy"

import re #regular expression
print "Finished Importing Regex"
import struct
print "Finished Importing Struct"
from collections import Counter
print "Finished Importing Counter"
import time

class Factoranalysis:
def init(self,dataarr):
print "StartinitFA"
self.dataarr=dataarr
self.numval=dataarr.shape[0]
self.numobs=dataarr.shape[1]
print "FAinitFIN"
def eigenvals(self):
print "eigenvals"
la = np.linalg.eigvalsh(np.corrcoef(self.dataarr))#np.corrcoef(self.dataarr)#
return la
def parallelanalysis(self,repnum):
laave=0.
for num in range(0,repnum):
print laave
laave = np.linalg.eigvalsh(np.corrcoef(np.random.randn(self.numval,self.numval))) + laave
return laave/repnum

if name == 'main':
laave=0.
for num in range(0,100):
U, s, V = np.linalg.svd(np.corrcoef(np.random.randn(100,100)))
laave = laave + s
print laave/100

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_Victorique__

2017/07/11 23:07

出来ればコードを示して欲しいですね
junsuke16

2017/07/11 23:49 編集

コードをモジュール内の分を追加しました。結構、全て載せるには大きいファイルになってしまうのですが、
quickquip

2017/07/11 23:51

「巨大な行列」なんて曖昧な書き方じゃなくて、実際の大きさ(shape)を書いてほしいです。
junsuke16

2017/07/12 01:19

(16224x16224)でした
guest

回答1

0

ベストアンサー

固有値演算の演算量はO(n^3 + Mn^2)です。

計算時間(演算量)が配列の大きさ(幅)の3乗程度になるということですから、配列の大きさが2倍になると計算時間は8倍程度に増える事になります。

「やたら時間(2000秒)が」というのは、O(n^3 + Mn^2)を大きく超えているという事でしょうか?

投稿2017/07/12 01:17

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問