如何修改和访问numpy数组中的元素

2024-04-23 17:23:09 发布

您现在位置:Python中文网/ 问答频道 /正文

最近,我正在为学校做一个数据挖掘项目,使用pythonpycharmnumpy数组。我的目标是在不使用.cov()的情况下找到协方差矩阵。给出的数据集约为(19000 x 11)。我使用了其中的一个子集来测试(12 x 11)。在尝试将数据居中时,我编写了一个名为def center(self, data):的函数基本上是一个for循环,它获取二维数组的一个列切片(data[:,I]),并对其进行迭代,将该值赋给原始值减去列的平均值,(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()

我已经运行了这个代码和它的几十个变体,从字面上说,数百次,但分配从来没有发生。我所能理解的最好的情况是,我没有使用带有pycharm的conda环境。我下载了anaconda3,但找不到康达.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”文件中“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,这解释了为什么该值从未更改,但是我使用其他硬设置值运行代码,并且该行为仍然存在。代码从不抛出任何警告或编译器错误的其他指示。你知道吗

如果有人有一些见解,将不胜感激。你知道吗


Tags: 函数代码inimportselfnumpyfordata