Как изменить и получить доступ к элементам с помощью массивов - PullRequest
0 голосов
/ 03 октября 2018

Недавно я работал над проектом интеллектуального анализа данных для школы, используя массивы python , pycharm и numpy .Моей целью было найти ковариационную матрицу без использования .cov () .Набор данных составил около (19 000 x 11) .Я использовал подмножество этого для тестирования (12 x 11) .Пытаясь центрировать данные, я написал функцию под названием def center(self, data): По сути, это цикл for, который берет срез столбца (data [:, i]) массива 2-D и перебирает егоприсваивая исходному значению это значение минус среднее значение столбца, (val = val - columnMean) следующий цикл:

    for i in range(len(data[0])):
        for j in range(len(data[:])): 
            data[:, i][j] = data[:, i][j] - data[:, i].mean()

Я запустил этот код и десяткиВариации этого, буквально, сотни раз, но назначение никогда не происходит.Лучшее, что я могу понять, это то, что я не использую среду conda с pycharm .Я скачал anaconda3 , но не могу найти conda.exe для пути, однако я даже не уверен, что это проблема.

Это импорт в программе:

#!/usr/bin/python, import os, import sys, import pandas as pd, import csv, import numpy as np, import random

Это фактически функция:

class AssignmentThree:
    def __init__(self, file):
    self.data = -1

    def center(self, data):

        d = data

        for col in range(len(d[0])):
            mean = d[:, col].mean()
                for row in range(len(d[:, 0])):

                    d[row][col] = d[row][col] - mean
                    # Originally I used d[:, i][row] = d[:, i][row] - mean

Это пример "данных" в файле "magic04.data ":

28.7967,16.0021,2.6449,0.3918,0.1982,27.7004,22.011,-8.2027,40.092,81.8828,g
31.6036,11.7235,2.5185,0.5303,0.3773,26.2722,23.8238,-9.9574,6.3609,205.261,g
162.052,136.031,4.0612,0.0374,0.0187,116.741,-64.858,-45.216,76.96,256.788,g
23.8172,9.5728,2.3385,0.6147,0.3922,27.2107,-6.4633,-7.1513,10.449,116.737,g
75.1362,30.9205,3.1611,0.3168,0.1832,-5.5277,28.5525,21.8393,4.648,356.462,g
51.624,21.1502,2.9085,0.242,0.134,50.8761,43.1887,9.8145,3.613,238.098,g
48.2468,17.3565,3.0332,0.2529,0.1515,8.573,38.0957,10.5868,4.792,219.087,g

он был передан в качестве параметра терминала с использованием sys и назначен отдельной функцией следующим образом:

Afile = open(file)

self.data = pd.read_csv(Afile, header=None, delimiter=',', usecols=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

Я обнаружил, что могу назначитьпеременная типа "d [: i) = d [:, i] .mean ()" без проблем, но:

 "d[:, i][row] = d[:, i][row] - d[:, i].mean()" or 
 "d[row][col] = d[row][col] - mean"

никогда ничего не присваивает "d [:, i][row] / или d [row] [col] " и оно остается неизменным.В довершение всего, когда я впервые запустил программу, первый "d [:, i] .mean ()" был равен 0, что объясняло, почему значение никогда не менялось, однако я запустил кодс другими жестко заданными значениями и поведение сохраняется.Код никогда не выдает никаких предупреждений или других указаний на ошибку компилятора.

Если у кого-то есть понимание, оно будет с благодарностью.

...