9阅网

您现在的位置是:首页 > 知识 > 正文

知识

python - 在同一个numpy数组中存储不同的数据类型[重复]。

admin2022-11-06知识20
这个问题在这里已经有了答案: 在一个NumPy数组中存储不同的数据类型? (3个答案) 封闭 28天前.

我正在声明一个数组,应该在我的特色矩阵输出中同时打印字符串和浮动类型,但它只显示每个字母的第1个字母,我应该改变什么来显示我的完整单词输出,我不想在输出中只有一个单词,因为它可以看到像我想要一个合适的表格,字符串显示在各自的列中,这里是。我的代码:

import cv2
import skimage.feature
import numpy as np
import pandas as pd

Image1 = cv2.imread("lab12.tif", 0)
GLCM_Image1 = skimage.feature.greycomatrix(Image1, [1], [0])
# w, h = 4, 7
# feature_matrix = [[0 for x in range(w)] for y in range(h)]
feature_matrix = np.zeros([4, 7],dtype = str)
feature_matrix[0,0] = ""
feature_matrix[0,1] = 'contrast'
feature_matrix[0,2] = 'dissimilarity'
feature_matrix[0,3] = 'homogeneity'
feature_matrix[0,4] = 'energy'
feature_matrix[0,5] = 'correlation'
feature_matrix[0,6] = 'ASM'
feature_matrix[1,0] = 'Image 1'
feature_matrix[2,0] = 'Image 2'
feature_matrix[3,0] = 'Image 3'


print("IMAGE 1 PROPERTIES:")
contrast1 = skimage.feature.greycoprops(GLCM_Image1, prop='contrast')[0][0]
print("Image 1 contrast", contrast1)
feature_matrix[1,1] = str(contrast1)
dissimilarity1 = skimage.feature.greycoprops(GLCM_Image1, prop='dissimilarity')[0][0]
print("Image 1 dissimilarity", dissimilarity1)
feature_matrix[1,2] = str(dissimilarity1)
homogeneity1 = skimage.feature.greycoprops(GLCM_Image1, prop='homogeneity')[0][0]
print("Image 1 homogeneity", homogeneity1)
feature_matrix[1,3] = str(homogeneity1)
energy1 = skimage.feature.greycoprops(GLCM_Image1, "energy")[0][0]
print("Image 1 energy", energy1)
feature_matrix[1,4] = str(energy1)
correlation1 = skimage.feature.greycoprops(GLCM_Image1, "correlation")[0][0]
print("Image 1 correlation", correlation1)
feature_matrix[1,5] = str(correlation1)
ASM1 = skimage.feature.greycoprops(GLCM_Image1, "ASM")[0][0]
print("Image 1 ASM", ASM1)
feature_matrix[1,6] = str(ASM1)

Image2 = cv2.imread("lab12a.tif", 0)
GLCM_Image2 = skimage.feature.greycomatrix(Image2, [1], [0])

print("\nIMAGE 2 PROPERTIES:")
contrast2 = skimage.feature.greycoprops(GLCM_Image2, "contrast")[0][0]
print("Image 2 contrast", contrast2)
feature_matrix[2,1] = str(contrast2)
dissimilarity2 = skimage.feature.greycoprops(GLCM_Image2, "dissimilarity")[0][0]
print("Image 2 dissimilarity", dissimilarity2)
feature_matrix[2,2] = str(dissimilarity2)
homogeneity2 = skimage.feature.greycoprops(GLCM_Image2, "homogeneity")[0][0]
print("Image 2 homogeneity", homogeneity2)
feature_matrix[2,3] = str(homogeneity2)
energy2 = skimage.feature.greycoprops(GLCM_Image2, "energy")[0][0]
print("Image 2 energy", energy2)
feature_matrix[2,4]= str(energy2)
correlation2 = skimage.feature.greycoprops(GLCM_Image2, "correlation")[0][0]
print("Image 2 correlation", correlation2)
feature_matrix[2,5] = str(correlation2)
ASM2 = skimage.feature.greycoprops(GLCM_Image2, "ASM")[0][0]
print("Image 2 ASM", ASM2)
feature_matrix[2,6] = str(ASM2)

Image3 = cv2.imread("lab12(b).tif", 0)
GLCM_Image3 = skimage.feature.greycomatrix(Image3, [1], [0])

print("\nIMAGE 3 PROPERTIES:")
contrast3 = skimage.feature.greycoprops(GLCM_Image3, "contrast")[0][0]
print("Image 3 contrast", contrast3)
feature_matrix[3,1] = str(contrast3)
dissimilarity3 = skimage.feature.greycoprops(GLCM_Image3, "dissimilarity")[0][0]
print("Image 3 dissimilarity", dissimilarity3)
feature_matrix[3,2] = str(dissimilarity3)
homogeneity3 = skimage.feature.greycoprops(GLCM_Image3, "homogeneity")[0][0]
print("Image 3 homogeneity", homogeneity3)
feature_matrix[3,3] = str(homogeneity3)
energy3 = skimage.feature.greycoprops(GLCM_Image3, "energy")[0][0]
print("Image 3 energy", energy3)
feature_matrix[3,4] = str(energy3)
correlation3 = skimage.feature.greycoprops(GLCM_Image3, "correlation")[0][0]
print("Image 3 correlation", correlation3)
feature_matrix[3,5] = str(correlation3)
ASM3 = skimage.feature.greycoprops(GLCM_Image3, "ASM")[0][0]
print("Image 3 ASM", ASM3)
feature_matrix[3,6] = str(ASM3)

print("\nFeature Matrix:")
pd.options.display.float_format = "{:,.2f}".format
print(pd.DataFrame(data=feature_matrix[1:,1:],
                  index=feature_matrix[1:,0],
                  columns=feature_matrix[0,1:]))

这是我的 产出:产出



【回答】:

Numpy是一个科学计算的软件包,最有用的是操作矩阵。如果你创建特征数组只是为了打印到控制台,那么使用pandas数据框架或python列表会方便很多。

也就是说:你的numpy数组的dtype为 <U1. 这是一个长度为1的Unicode字符串。所以它实际上是一个字符数组,这就是为什么它将只存储你分配的每个字符串的第一个字符。

Numpy结构化数组 是用来保存不同数据类型的值。但你也可以使用dtype object 来存储浮点数和任意长字符串在同一个矩阵中。

np.full((4,7), 0, dtype=np.object)

或者你可以指定你需要的最大长度的字符串。dtype='<U256' 例如,指定最多可以存储256个字符的字符串。

你的代码例子非常长,大部分行数与问题没有直接关系。最好只展示重现问题所需的最少代码。这也会帮助你理解问题,缩小错误所在。