亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用特定的索引順序重塑 numpy 數組?

如何使用特定的索引順序重塑 numpy 數組?

慕容森 2021-11-09 10:38:37
我正在嘗試將一些數組重塑為特定的順序,但numpy.reshape并沒有解決我的問題,除非我真的必須使用,否則我不想使用任何循環。讓我們以一個a帶有值的數組為例:a = [['x1','x2','x3','y1','y2','y3','z1','z2','z3'],['x4','x5','x6','y4','y5','y6','z4','z5','z6']]并np.reshape(a,[-1,18])返回:array([['x1', 'x2', 'x3', 'y1', 'y2', 'y3', 'z1', 'z2', 'z3',      'x4', 'x5','x6', 'y4', 'y5', 'y6', 'z4', 'z5', 'z6']], dtype='<U2')但是否有可能得到這樣的結果:[['x1', 'x2', 'x3','x4', 'x5','x6', 'y1', 'y2', 'y3','y4', 'y5', 'y6', 'z1', 'z2', 'z3', 'z4', 'z5', 'z6']]
查看完整描述

2 回答

?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

您需要重塑和轉置數組:


import numpy as np


a = np.array([['x1','x2','x3','y1','y2','y3','z1','z2','z3'],

              ['x4','x5','x6','y4','y5','y6','z4','z5','z6']])

b = a.reshape(2, 3, 3).transpose((1, 0, 2)).ravel()

print(b)

# ['x1' 'x2' 'x3' 'x4' 'x5' 'x6' 'y1' 'y2' 'y3' 'y4' 'y5' 'y6' 'z1' 'z2'

#  'z3' 'z4' 'z5' 'z6']

一步一步,首先你有你的初始數組。


print(a)

# [['x1' 'x2' 'x3' 'y1' 'y2' 'y3' 'z1' 'z2' 'z3']

#  ['x4' 'x5' 'x6' 'y4' 'y5' 'y6' 'z4' 'z5' 'z6']]

然后將其重塑為“兩個 3x3 矩陣”:


print(a.reshape(2, 3, 3))

# [[['x1' 'x2' 'x3']

#   ['y1' 'y2' 'y3']

#   ['z1' 'z2' 'z3']]

#

#  [['x4' 'x5' 'x6']

#   ['y4' 'y5' 'y6']

#   ['z4' 'z5' 'z6']]]

現在,如果您將其展平,x3那么您將獲得y1. 您需要對軸重新排序,以便在x3go之后x4,這意味著您首先要迭代列 ( x1, x2, x3),然后跳轉到下一個矩陣以迭代其第一行 ( x4, x5, x6) 中的列,然后繼續到下一行第一個矩陣。所以最里面的維度應該是相同的(列),但是你必須交換前兩個維度,所以你首先改變矩陣,然后改變行而不是相反:


print(a.reshape(2, 3, 3).transpose((1, 0, 2)))

# [[['x1' 'x2' 'x3']

#   ['x4' 'x5' 'x6']]

#

#  [['y1' 'y2' 'y3']

#   ['y4' 'y5' 'y6']]

#

#  [['z1' 'z2' 'z3']

#   ['z4' 'z5' 'z6']]]

現在可以將其展平以獲得所需的結果。


print(a.reshape(2, 3, 3).transpose((1, 0, 2)).ravel())

# ['x1' 'x2' 'x3' 'x4' 'x5' 'x6' 'y1' 'y2' 'y3' 'y4' 'y5' 'y6' 'z1' 'z2'

#  'z3' 'z4' 'z5' 'z6']


查看完整回答
反對 回復 2021-11-09
?
冉冉說

TA貢獻1877條經驗 獲得超1個贊

如果x,y和z值的長度相同,則可以使用以下方法np.array_split將結果展平.ravel():


np.array(np.array_split(a, 3, axis=1)).ravel()


array(['x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'y1', 'y2', 'y3', 'y4', 'y5',

       'y6', 'z1', 'z2', 'z3', 'z4', 'z5', 'z6'], dtype='<U2')


查看完整回答
反對 回復 2021-11-09
  • 2 回答
  • 0 關注
  • 224 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號